0

可能重复:
char a[] = “string”; 之间有什么区别?和 char *p = “字符串”;

我在某处读过这个问题。

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'为第二种情况做,但我可以为第一种情况做?

谢谢。

4

1 回答 1

-2

我不知道C 中字符串文字的“生命周期”,因此我的回答无效。

我的答案:

只要处理了内存管理,指针类型和向量/矩阵类型就可以互换。在幕后,编译器将向量/矩阵索引操作切换为指针算术。

buf[3] == *(buf+3)

在这种特定情况下,编译器计算字符串的长度并为向量/矩阵和指针分配(堆栈)内存。

在其他情况下,您必须手动为指针分配内存,以便像使用向量/矩阵一样安全地使用它。但语法上同样适用于向量/矩阵,因为您必须指定它的长度char buf[5]- 它不像手动内存分配那样冗长,但您必须指定它。

编辑:

上面的答案解释了这样一个事实,即在大多数情况下,指针和向量/矩阵在功能上是可互换的,但它们确实具有不同的底层结构(指针需要额外的内存位置来将地址存储到)。

在字符串文字的情况下,它们在程序的整个生命周期内被分配并保持不变,这使得指向它们的指针在不使用内存分配的情况下保持有效。

于 2012-10-24T11:18:36.600 回答