带指针的字符串数组

时间:2013-01-13 00:29:30

标签: c++ pointers

在以下代码中:

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个字符数组的指针。

3 个答案:

答案 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的指针。它衰减(当它确实)到指向第一个项目的指针。因此,需要应用地址运算符,以及您无法将数组表达式转换为指向数组的指针的错误消息。