char names[][2] = {"abcdefg", "hijklmn", "qrstuv"};
printf("%c\n",*(*(names+0)+0));
printf("%s\n",names);
此代码的最后一行打印abhiqr
。但是,更改“2”将使程序打印每个数组字符串中的 n 个字符(即 abchijqrs
)。
为什么会这样?
此外,在中间那条线上,我不明白为什么我有一个理论:我需要两个间接操作,因为 names 实际上是指向其他指针(数组)的指针,第一个解引用让我 STILL 用指针?
我可以使用哪些资源来详细阅读有关 C 指针的信息?
最佳答案
这一行看起来不对:
char names[][2] = {"abcdefg", "hijklmn", "qrstuv"};
不应该是:
char names[][7+1] = {"abcdefg", "hijklmn", "qrstuv"};
因为是(char names[][2]
),所以会初始化如下:
01?????
name[0] = "abcdefg";
^
Buffer overflow; name[1] points here...
01?????
name[1] = "hijklmn";
^
Buffer overflow; name[2] points here...
01????
name[2] = "qrstuv";
^
Buffer overflow; name[3] points here....
关于c - 为什么此 printf 显示多个数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553872/