1

我最近有一个任务,我必须为结构动态分配内存。我使用了这种方法:

myStruct *struct1 = malloc(sizeof *struct1);

这工作得很好。但是,我不明白怎么做。我认为struct1指针此时未初始化,因此应该没有大小。那么如何malloc(sizeof *struct1)返回有效的内存量来分配呢?

4

3 回答 3

5

sizeofC 中的运算符不计算操作数。它只看类型。例如:

#include <stdio.h>

int main(void)
{
    int i = 0;
    printf("%zu\n", sizeof i++);
    printf("%d\n", i);
    return 0;
}

如果你运行上面的程序,你会看到它i仍然是 0。

因此,在您的示例中,*struct1未评估,它仅用于类型信息。

于 2013-03-27T02:23:08.857 回答
0
malloc(sizeof(*struct1))

分配的内存量等于结构的大小,具体取决于您声明的结构变量的数量。Sizeof 用于返回 struct1 的大小,该大小是在编译时发现的。

于 2013-03-27T02:25:05.890 回答
0

试试这个。先声明结构,

typedef struct {

int a;
int b;
int c;

}MyStruct;

然后在分配内存之前,初始化一个结构变量并按照给定的分配内存,

MyStruct test;

printf("~~~~~ sizeofStruct: %ld", sizeof(test));

MyStruct *myAlloc = (MyStruct *)malloc(sizeof(test));

printf("~~~~~ sizeofmyAlloc: %ld", sizeof(*myAlloc));

干杯!

于 2013-04-29T09:08:39.463 回答