c++数组名 和 指针

char str[] = "hello world";
char *mStr = str;
cout << *&str << endl; //输出 hello world
cout << *mStr << endl;//输出 h 为什么不输出hello world???
char *mpStr = &str;//这里为什么会显示语法错误???

1.str是数组,str相当于数组首地址。

2.mStr 指向 str,相当于指向了数组的第一个地址,*mStr 就输出h。

3.str只是相当于数组首地址,但是对数组名取地址,&str 得到的是一个指向整个地址的指针,类型是char(*)[12]. 所以第一行输出hello world。

4. 最后 你将char* 指向一个类型是char(*)[12] 类型 当然就不对了。会报语法错误,你可以这样写 char *mpStr = (char*) &str; 强制转换

你可以参考图片理解一下,望采纳!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-04
// 字符指针
cout << char_pointer; // will output the string from the address
// *字符指针 ===> 字符
cout << *char_pointer; // will output the char at the address

我们来看看

char str[] = "hello world";  // str is a (字符数组)字符指针, 具体点是 A12_c, 12个字符数组,char[12]
char *mStr = str;  // 定义新 字符指针 mStr, 指向 str
// 这句话类似于  cout << str << endl; 输出字符串
cout << *&str << endl; //输出 hello 
// 输出字符
worldcout << *mStr << endl;//输出 h 为什么不输出hello world???
// str 是字符数组, &str 是字符数组地址(PA12_c),类型是 PA12_c
char *mpStr = &str;//这里为什么会显示语法错误???
char *mpStr = (char*)(&str); // 强制转换类型就没问题。

第2个回答  2019-04-03
第一个*和&相抵消 等于没有 就是cout <<str
第二个相当于str[0]
第三个类型不同
&str这样返回的是char** 而mpStr是个char*类型追问

我试了一下,&str返回的好像不是char**

追答

失误了

本回答被网友采纳
第3个回答  2019-04-04
char数组的数组名类型为char*,输出追答

char数组的数组名是char*类型的,储存着数组第一个元素(下标为零)的地址,所以令一个指针等于数组名,再对该指针解引用,输出的是数组的地址元素而不是整个数组

另外,数组是储存在一串(暂且这么说)地址中,比如char a[5]={...},数组a的5个元素储存5个不同地址中,&a[n]+1=&a[n+1],

第4个回答  2019-04-04
char *mpStr = &str;//这里为什么会显示语法错误???
------------------------------
其实是可以的, &str是一个地址值, 是str字符串的首地址, 转换一下就行了
char *mpStr=(char*)&str;
printf("%s",mpStr);
相似回答