c++取字符数组地址为啥要加& 而int的不用直接p就好了

如题所述

第1个回答  2019-01-24
1
name是C++
字符数组的定义。
而C/C++在的字符数组
定义应该是
连续的字符元素存储的内存空间的首地址。
因此数组名name等效于一个char的内存地址。(实际除去语法定义有一定特殊性外,基本就等同于char*)。
按照这个说法,name也就等于&(name[0]),
加括号只是为了让你能逻辑上好理解,不加也行。
2
c/c++没有标准的字符串类型。
对字符串的定义是“以char*为首地址,以'\0'字符为结束标志的连续存储空间的值“
因此,当处理char*时,会有两种可能:
a
代表一个字符串。
b
代表一个字符的内存地址。
在C++的标准输出流iostream类里,在提取符<<重载时,如果后面是char*类型,缺省认为是字符串。
3
注意,对于char*的操作,很多函数和类库都认为是字符串。但不等于说所有的定义char*都是字符串。不排除在某些函数和应用场景,它代表的是字符地址。这个视情况而定。
4
如果想打印char*的内存地址,强行转换为非char的指针类型就可以。其他类型指针缺省没有其他含义。
例如:cout
<<
(void*)p
<<
endl;(最好是void*)
虽然cout
<<
(int*)p
<<
endl;也可以,但是不推荐这么做。