AslanPAPA Asked:2024-12-02 05:51:51 +0800 CST2024-12-02 05:51:51 +0800 CST 2024-12-02 05:51:51 +0800 CST 约翰在这个例子中表明了什么? 772 看这里,char* gg[] = {"John", "Maria"};我想明白,如果这是一个指向字符串的指针数组,那么什么指向John?也许John指向其第一个字符(即 J)的地址,并存储指向该行的gg[i]字符的地址?JJohn c++ 1 个回答 Voted Best Answer Stanislav Volodarskiy 2024-12-02T14:07:21+08:002024-12-02T14:07:21+08:00 首先,你写了糟糕的代码。文字“John”的类型为const char*,并且在数组 中没有位置char*。出于向后兼容性的原因,C 编译器只允许这样的代码: #include <stdio.h> int main() { char* gg[] = {"John", "Maria"}; } $ gcc -Wwrite-strings example.c temp.c: In function ‘main’: temp.c:8:19: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 8 | char* gg[] = {"John", "Maria"}; | ^~~~~~ temp.c:8:27: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 8 | char* gg[] = {"John", "Maria"}; | ^~~~~~~ 在底层,编译器为两个字符数组分配内存。它们是不可变的: const char john_array[5] = {'J', 'o', 'h', 'n', '\0'}; const char maria_array[6] = {'M', 'a', 'r', 'i', 'a', '\0'}; 每个数组都与一个指向数组第一个字符的指针相关联: const char *john_pointer = &john_array[0]; const char *maria_pointer = &maria_array[0]; 数组由指针组成gg: const char* gg[] = {john_pointer, maria_pointer };
首先,你写了糟糕的代码。文字“John”的类型为
const char*
,并且在数组 中没有位置char*
。出于向后兼容性的原因,C 编译器只允许这样的代码:在底层,编译器为两个字符数组分配内存。它们是不可变的:
每个数组都与一个指向数组第一个字符的指针相关联:
数组由指针组成
gg
: