这可能是个初学者的问题,但一直让我困惑我知道在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);