这可能是个初学者的问题,但一直让我困惑我知道在c语言中,数组本身就是指向数组第一个元素的指针。所以考虑下面的例子

char *words[LENGTH];
words[0] = "zero";
words[1] = "one";
words[2] = "two";
printf("%s\n",*words);

最终打印结果是zero。然而,我的理解是words是指向words数组的第一个元素的指针,它是一个char pointer=>words是指向char的指针。因此*words将是指向char的指针。因此,我希望在这里打印内存地址,而不是实际的字符串。我在这里有什么误会?

最佳答案

你很接近事实上你是对的,c-string是一个指针,它包含字符串的第一个字符的地址。c字符串不是字节而是地址。printf flag%s需要这些字节的地址。所以您确实给了printf()一个地址,但是您要求printf()显示c字符串的值。所以“零”。你唯一的错误是你没有阅读printf()的手册。
如果需要地址,请尝试:

printf("%p\n", (void *)*words);

10-01 22:39
查看更多