当声明变量未完成时,为什么编译器知道它的大小?

时间:2017-11-14 07:15:37

标签: c

指针pa现在声明,在函数malloc()中使用它,

为什么编译器可以知道它的大小?而编译器如何在代码下解析:

int *pa = malloc(10 * sizeof *pa); // allocate an array of 10 int

struct Node {
    int value;
    struct Node *prev;
    struct Node *next;  
}

prevnextstruct Node *,但现在struct Node未定义。

为什么编译器能够为*prev*next分配足够的大小?

3 个答案:

答案 0 :(得分:2)

因为它们是指针。编译器知道为指针分配多少内存。

答案 1 :(得分:1)

如果此处显示结构声明,您感兴趣的成员变量是指向某种类型的指针。

对于任何给定的环境,指针(类型)保持定义的大小。在为类型的变量分配内存时,编译器不需要知道该类型的实际大小,它只需要知道指向该类型的指针所需的大小,它就知道了。

答案 2 :(得分:0)

编译器没有为Node结构内的select r from Region r where r.fatherId is NULL or r.fatherId='' 结构分配足够的空间。虽然它确实知道指针需要多少,并为两个指针和整数分配足够的空间。