0

我了解到,声明字符数组的传统方式如下:

char c[] = "John";

但是,我也注意到您可以将其声明为:

char *c = "John";

这究竟是如何工作的?我知道它与指针有关,但有人可以详细说明吗?任何帮助将不胜感激。

4

3 回答 3

0

好吧..我希望我不会把事情搞砸,但是我看到它像这样。

写 ="John" 所做的就是在程序内存中的某个位置放置一个字符串,该字符串由 '\0' 终止。

这就是为什么你的电话没有区别的原因。两者都在程序内存中创建一个指向字符串开头的 char 指针。

如果您要分配此内存,例如使用 malloc()。该指针将指向您的运行时内存,而不是程序内存中的某个位置。

于 2013-08-19T22:19:18.543 回答
0

在您的第一个示例中,c是一个char. 但在:

 char *c = "John";

c这里不是一个数组,而是一个指向char *字符串文字的指针(类型)。指针和数组在 C 中是不同的类型。

如果您想了解指针和数组,下面是一个很好的链接:

http://www.torek.net/torek/c/pa.html

于 2013-08-19T22:15:59.557 回答
0

“字符串文字(C 源代码中双引号字符串的正式术语)可以以两种略有不同的方式使用......” http://c-faq.com/decl/strlitinit.html

于 2013-08-19T22:18:30.587 回答