gpt4 book ai didi

c - C 结构中的数组,指向常量的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:37 24 4
gpt4 key购买 nike

我有以下代码:

typedef struct{
char *name;
int age;
} person;


int main(){
person Peter = {"peter", 19};
person Petercp = Peter;
Peter.name[0] = 'a';
Petercp.name = "hello";
printf("%s %d\n", Peter.name, Peter.age);
printf("%s %d\n", Petercp.name, Petercp.age);
}

编译器给我该行的错误消息“BAD ACCESS”

Peter.name[0] = 'a'

但下面这行看起来不错

Petercp.name = "hello";

似乎 person.name 数组是一个指向常量的指针。我的结论对吗?

并且,如果我将结构中的数组声明为

char name[];

我再次被允许进行更改

Peter.name[0] = 'a'

这是为什么?

最佳答案

当您执行 person Peter = {"peter", 19}; 时,您将 name 指向字符串文字“peter”。

Peter.name[0] = 'a' 尝试更改 name 指向的 1. 元素。修改字符串文字是未定义的行为,在您的情况下会导致崩溃。在实践中,字符串文字通常加载到内存的只读部分。

另一方面,执行 Petercp.name = "hello"; 只是将指针更改为指向其他地方,这很好。

如果您将 name 成员声明为 char name[64],则初始化器

  person Peter = {"peter", 19};

会将字符串“peter”复制到name 数组中。名称数组只是一个普通的字符数组,您可以在其中更改各个元素。

关于c - C 结构中的数组,指向常量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19028943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com