在以下代码中:
int main()
{
char names[2][11] = {"Manchester","Party"};
char (*jk)[11];
jk = names; // LINE 1
char gaming[10] = {"Jetking"};
char (*po)[10];
po = &gaming; // LINE 2
cout<<"PO is "<<*po;
第2行要求我放&amp;在游戏前,而第1行没有。第2行的错误,当我不放&amp;是,“错误:无法将'char [10]'转换为'char(*)[10]'赋值”?我不太明白这一部分。自“char(* po)[10];”可以解释为指向10个字符数组的指针。
答案 0 :(得分:1)
char gaming[10]
是一个char数组。当您编写po = gaming
时,游戏将转换为指向此作业的char的指针。但是,po
是指向字符数组的指针。
因此,最后,编译器会告诉您它无法将pointer to char
转换为pointer to an array of chars
。就是这样。
答案 1 :(得分:1)
在作业中
jk = names;
类型names
的数组char[2][11]
将转换为指向其第一个元素的指针,因此它会衰减为char (*)[11]
。
gaming
,但在大多数情况下都会转换为char*
,并且char*
与po
所拥有的类型char (*)[10]
不兼容,所以该作业无效。如果您使用gaming
的地址,则会获得所需的char (*)[10]
。
答案 2 :(得分:1)
char (*po)[10];
是指向10个char
项的数组的指针。
数组表达式不会衰减为指向self-as-array的指针。它衰减(当它确实)到指向第一个项目的指针。因此,需要应用地址运算符,以及您无法将数组表达式转换为指向数组的指针的错误消息。