数组的引用

时间:2013-03-18 17:19:37

标签: c++ arrays pointers

我有以下代码

char str[] = "some string"; // legal
char const* str2 = str;     // legal
char const** str3 = &str2;  // legal
char const** str4 = &str;   // illegal (error: cannot convert 'char (*)[12]' to 'const char (*)[]' in initialization )

为什么不编译最后一个? &str的类型是什么?

2 个答案:

答案 0 :(得分:7)

由于str是一个数组,&str的类型是“指向12 const char数组的指针”。有效的声明是:

char const (*str4)[12] = &str;

str3的声明工作正常,因为str2是“指向const char”的指针,而不是使用数组到指针转换初始化的数组。获取数组地址时不会发生相同的数组到指针转换,如str4的声明中那样。

答案 1 :(得分:0)

由于参考人数的多少。 (str []或str *) - > data,str2 - >数据,str3 - >指针(str2) - > data,str4 - >指针 - >数据。 * simbols的数量告诉你许多你需要取消引用它以获取数据的imes。每次都是从一个地址跳到另一个地址,只有最后一次访问才是数据。

正确的方法是:

char const* str4 = &str; //or
char const* str4 = str2;