我了解到,声明字符数组的传统方式如下:
char c[] = "John";
但是,我也注意到您可以将其声明为:
char *c = "John";
这究竟是如何工作的?我知道它与指针有关,但有人可以详细说明吗?任何帮助将不胜感激。
好吧..我希望我不会把事情搞砸,但是我看到它像这样。
写 ="John" 所做的就是在程序内存中的某个位置放置一个字符串,该字符串由 '\0' 终止。
这就是为什么你的电话没有区别的原因。两者都在程序内存中创建一个指向字符串开头的 char 指针。
如果您要分配此内存,例如使用 malloc()。该指针将指向您的运行时内存,而不是程序内存中的某个位置。
在您的第一个示例中,c
是一个char
. 但在:
char *c = "John";
c
这里不是一个数组,而是一个指向char *
字符串文字的指针(类型)。指针和数组在 C 中是不同的类型。
如果您想了解指针和数组,下面是一个很好的链接:
“字符串文字(C 源代码中双引号字符串的正式术语)可以以两种略有不同的方式使用......” http://c-faq.com/decl/strlitinit.html