-4

在以下代码中:

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 行要求我将 & 放在游戏前面,而第 1 行不需要。当我不放 & 时,它为第 2 行给出的错误是,“错误:无法将 'char [10]' 转换为 'char (*)[10]' in assignment”?我不太明白这部分。由于“char (*po)[10];” 可以解释为指向 10 个字符的数组的指针。

4

3 回答 3

1

char gaming[10]是一个字符数组。当您编写 时po = gaming,游戏将转换为指向此分配的 char 的指针。po但是,它是一个指向字符数组的指针。

因此,最后,编译器会告诉您它不能将 a 转换pointer to char为 a pointer to an array of chars。就这样。

于 2013-01-13T00:44:14.170 回答
1

在任务中

jk = names;

namestype的数组char[2][11]被转换为指向其第一个元素的指针,因此它衰减为 a char (*)[11]

gamingchar*, 但是在大多数情况下被转换为 a ,这与具有 ,char*的类型不兼容,因此赋值无效。如果你取的地址,你得到的正是所需的。pochar (*)[10]gamingchar (*)[10]

于 2013-01-13T00:47:11.953 回答
1
char (*po)[10];

char是一个指向 10项数组的指针。

数组表达式不会衰减为指向自身作为数组的指针。它衰减(当它衰减时)指向第一项的指针。因此,需要应用地址运算符,以及您收到的关于无法将数组表达式转换为指向数组的指针的错误消息。

于 2013-01-13T00:47:14.890 回答