gpt4 book ai didi

c - 通过结构体类型的指针向结构体成员插入值

转载 作者:行者123 更新时间:2023-11-30 17:23:26 25 4
gpt4 key购买 nike

我不明白指针和结构之间的区别;为什么如果我尝试通过结构类型的指针访问结构成员,并使用指针给它们值,我会得到段错误?

如果我将结构指针声明为:

typedef struct a {
int b;
}A;

int main(){
A *ptr;
}

我可以使用此语法访问结构成员

(*ptr).b or ptr->b

即使 ptr 没有指向任何内容,ptr 也可以访问结构体成员,因为 ptr 被声明为结构体类型,对吗??

如果我没有显式地将指针指向某处,则指针通常指向他的类型,在本例中为 A no ??

但是当我尝试通过指针向结构成员提供一些值时,我总是遇到段错误

ptr->b=9;

最佳答案

Even if ptr points to nothing, ptr can access struct member because ptr is declared as type struct, right?

为什么会这样?指针只是指向某个地方; 某个地方不一定是内存中的有效位置。

char* p = (char*)0x12345678; // Syntactically valid; not a real place in memory!

指针不会分配除 sizeof(void*) 字节以外的任何内存来保存实际地址。

由于 ptr 只是一个指针,而不是实际的结构对象,因此没有在任何地方分配 A 结构,因此会出现段错误。

A someA;
A* ptr;
(*ptr).b = 9; // or...
ptr->b = 9;

以上是正确的用法。

关于c - 通过结构体类型的指针向结构体成员插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27588630/

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