为其成员构造内存分配

时间:2013-07-23 10:41:05

标签: c arrays pointers

我已经看到为这样的结构分配内存

   ///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...

是否合法?

4 个答案:

答案 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]的内容来查找[]

的其他成员的大小