数组的引用

use*_*416 4 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 )
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*eld 7

由于str是一个数组,因此类型&str是"指向12的数组的指针const char".有效的声明是:

char const (*str4)[12] = &str;
Run Code Online (Sandbox Code Playgroud)

工作的声明str3很好,因为它str2是一个"指向"的指针const char,而不是一个数组,使用数组到指针的转换进行初始化.获取数组的地址时,不会发生相同的数组到指针转换,如声明中所示str4.