2013-08-19 81 views
0

我已经了解到,声明一个字符数组的传统方式如下:指针和C数组 - 极其混乱

char c[] = "John"; 

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

char *c = "John"; 

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

+1

阅读[comp.lang.c FAQ](http://www.c-faq.com)的第6部分,并忽略任何试图告诉你数组是“真正”指针的人。 –

+0

@RadicalOne,你也可以阅读Kernighan和里奇(K&R)这不是一个自我发表的论战。他们将解释如何使用指针以及如何使用指针来引用数组。 – JackCColeman

+0

我看到你的问题,你应该阅读完整的答案:[sizeof(&arr)返回什么?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –

回答

0

在你的第一个例子中,c是一个char的数组。但在:

char *c = "John"; 

c这里不是一个数组,但指针(类型char *)到一个字符串。指针和数组是不同类型的C.

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

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

0

好吧..我希望我不会在这里搞砸的东西,但我看到它这样。

通过写入=“John”,您可以在程序存储器的某处放置一个字符串,该字符串以'\ 0'结尾。

这就是为什么你的通话没有任何区别。两者都会在程序存储器中创建一个指向字符串开头的char指针。

如果您要分配此内存与malloc()。指针指向你的运行时内存,而不是指向程序内存的某处。