我已经看到为这样的结构分配内存
///enter code here
for(i = 0; i<10; i++)
s->a[i].mem = malloc(sizeof(*a[0]));
这意味着什么?它是为一个或为mem分配内存。我很困惑。
如果它分配给指针mem ??我在代码中看到,他们通过
访问mem[0] = bla...bla...
mem[1] = bla...bla...
是否合法?
答案 0 :(得分:4)
a[]
应该是一个struct数组,其中每个a[i]
表示一个结构。
在结构mem
中应该是结构类型的指针(自我指向)。所以表达。
s->a[i].mem = malloc(sizeof(*a[0]));
使用malloc动态分配内存并将地址分配给mem
类似的东西:
struct xyx{
int data;
struct xyx *mem;
};
struct xyx a[10];
所以:a[0]
类型为struct xyx
。
和表达:
a[i].mem = malloc( sizeof(*a[0]));
同样如下:
a[i].mem = malloc( sizeof(struct xyz);
<强>第二强>
现在,什么是s->a[i]
?
s
又是一些其他结构类型的指针变量,其中有一个struct a[]
类型的数组xyz
。类似的东西:
struct abc{
struct xyx a[10];
};
和s
应为:
struct abc x;
struct abc *s = &x;
应该动态分配或s
的内存。所以s -> a[i]
访问成员。
所以表达:
s -> a[i].mem = malloc(sizeof(*a[0]));
^ ^ ^
| | is pointer to struct of type that same as type of a[0]
| array of struct's elements,
s is pointer to a struct in which `a[]` is datamember
答案 1 :(得分:1)
这将分配大小为*a[0]
的内存,指向此内存块开头的指针将保存在mem
指针中。
答案 2 :(得分:0)
代码分配一个与a[0]
指向的对象大小相同的块。然后它在s->a[i].mem
中存储指向该块的指针。
答案 3 :(得分:0)
这意味着分配一个与[0]指向
的内容大小相同的内存块这种内存分配由s-> a [i] .mem
指向所以,我猜在程序的其他地方设置了一个[0],然后这个片段使用[0]的内容来查找[]
的其他成员的大小