gpt4 book ai didi

c - 为指向结构内结构的指针分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:44 25 4
gpt4 key购买 nike

我有两个结构:

struct b{int b;float d;}; and 
struct a{int count; struct b* ptr;}
struct a *a_temp;

现在我为 10 个类型 b 的结构分配内存,并将地址放在结构 a 的 ptr 中。(代码是给我的,他们出于某种原因不想使用双指针)

a_temp = (struct a*)malloc(sizeof(struct a));
a_temp->ptr = (struct b*)malloc(10*sizeof(struct b));
struct b* b_temp;

我必须将 b 类型的第二个结构的地址加载到 temp_b。我试过 b_temp = a_temp->ptr[1]; 给出了错误但是 b_temp = &(a_temp->ptr[1]); 在我尝试使用它并使用它访问结构 b 的内容时正在工作,这是为什么?

提前致谢

最佳答案

ptr[1] 是结构,由ptr + 1 指向(就像*(ptr+1)), b_temp 得到一个指向结构的指针,所以你必须传递 a_temp->ptr[1] 的地址,即 &a_temp->ptr[1] .

expression      | type
---------------------------
a_temp->ptr | struct b*
a_temp->ptr[1] | struct b
&a_temp->ptr[1] | struct b*
a_temp->ptr + 1 | struct b*
b_temp | struct b*

编辑:

如果你有一个指针,比如说 int * x,那么下面的表达式是相同的:x[1]*(x+1) ,它们都遵循地址 x+1。换句话说,这些表达式的值是指针 x 指向的变量类型,在本例中它是一个 int,因为 xint *(指向 int 的指针)它包含 addressint 变量。

关于c - 为指向结构内结构的指针分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7965638/

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