我已经了解到,声明一个字符数组的传统方式如下:指针和C数组 - 极其混乱
char c[] = "John";
但是,我也注意到,您可以将它声明为:
char *c = "John";
这是如何工作的?我知道它与指针有关,但有人可以详细说明吗?任何帮助将不胜感激。
我已经了解到,声明一个字符数组的传统方式如下:指针和C数组 - 极其混乱
char c[] = "John";
但是,我也注意到,您可以将它声明为:
char *c = "John";
这是如何工作的?我知道它与指针有关,但有人可以详细说明吗?任何帮助将不胜感激。
在你的第一个例子中,c
是一个char
的数组。但在:
char *c = "John";
c
这里不是一个数组,但指针(类型char *
)到一个字符串。指针和数组是不同类型的C.
下面是一个很好的链接,如果你想了解指针和数组:
“字符串文字(正规术语,双引号字符串在C源)可以用两种稍微不同的方式...“ http://c-faq.com/decl/strlitinit.html
好吧..我希望我不会在这里搞砸的东西,但我看到它这样。
通过写入=“John”,您可以在程序存储器的某处放置一个字符串,该字符串以'\ 0'结尾。
这就是为什么你的通话没有任何区别。两者都会在程序存储器中创建一个指向字符串开头的char指针。
如果您要分配此内存与malloc()。指针指向你的运行时内存,而不是指向程序内存的某处。
阅读[comp.lang.c FAQ](http://www.c-faq.com)的第6部分,并忽略任何试图告诉你数组是“真正”指针的人。 –
@RadicalOne,你也可以阅读Kernighan和里奇(K&R)这不是一个自我发表的论战。他们将解释如何使用指针以及如何使用指针来引用数组。 – JackCColeman
我看到你的问题,你应该阅读完整的答案:[sizeof(&arr)返回什么?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –