如上具体请看图,有个疑问既然a是这里的字符数组名是个变量存在内存栈中地址假设为图中所画的内存地址为1100名字叫a,那么它的行为是不是就是跟指针一样是指向字符串的首地址,也就是说a里面保存的是字符串的首地址就是我图里面画的1011,这里问题来了,我输(void *)a这个意思是打印a内容即它所保存的字符串首地址1011,这个没错,可cout<<&a这个应该是打印指针变量a自己的地址1100而不是它指向的地址1011,可是实际上输出却发现两个结果一样都是打印a的内容1011,请问这是为什么?
a为字符数组,数组名a代表的存储单元首地址,每个存储单元存储一个字符,如首单元地址为1100,此单元存放字符h,1101单元则存储字符e,以此类推,1110单元存储字符串结束符\0。cout<<a 表示输出字符数组a的内容 即hello wordcout<<&a 表示输出数组 同上a的首地址cout<<(void *)a
指针p指向字符串常量"hello word",即p中存放该字符串的首地址,c++为了兼容c语言,当输出常量字符串的首地址时实际输出该字符串。cout<<(int)p;则为p的内容,即字符串的地址,而cout<<&p;为指针变量的地址,而非上述字符串的地址。仅供参考。 追问 我也是你这么理解的可是最终结果两个输出都一样,输出的都是字符串首地址呢?