可能重复:
What is the difference between char a[] = “string”; and char *p = “string”;
我在某个地方读过这个问题。
char buf[]="hello";
char *buf="hello";
In terms of code generation, how do the two definitions of buf, differ?
有四种选择,我标记了
The first definition certainly allows the contents to buf to be safely modified at runtie; the second definition does not.
但事实证明,测验大师将以下内容标记为正确。
They do no differ-- they are functionally equivalent
为什么我的选择错了,因为我不能为第二种情况做buf[3]='t'
,但我能为第一种情况做什么?
感谢。
答案 0 :(得分:-2)
我不知道"life-time" of string literal in C因此我的答案无效。
指针类型和矢量/矩阵类型可以互换只要处理内存管理。在封面下,编译器将向量/矩阵索引操作切换为指针算法。
buf[3] == *(buf+3)
在这种特定情况下,编译器会计算字符串的长度,并为向量/矩阵和指针分配(堆栈)内存。
在其他情况下,您必须手动为指针分配内存,以便像使用矢量/矩阵一样安全地使用它。但在语法上同样适用于向量/矩阵,因为你必须指定它的长度char buf[5]
- 它不像手动内存分配那么冗长,但你必须指定它。
上面的答案解释了这样一个事实:在大多数情况下,指针和向量/矩阵在功能上可互换,但它们确实有不同的底层结构(指针需要额外的内存位置来存储地址到)。
在字符串文字的情况下,它们在程序的整个生命周期中被分配和保持不变,这使得它们的指针在不使用内存分配的情况下保持有效。