在IDEONE上执行此代码时:
#include <stdio.h>
#include <stdlib.h>
struct A{
int x;
char c;
};
struct B{
int y;
};
int main(void) {
// your code goes here
struct A* pa = malloc(sizeof(struct B));
printf("%dn",sizeof(*pa));
pa = malloc(sizeof(int));
printf("%dn",sizeof(*pa));
pa = malloc(sizeof(char));
printf("%dn",sizeof(*pa));
pa = malloc(0);
printf("%dn",sizeof(*pa));
return 0;
}
我:8
8
8
8
我猜,因为pa
是类型struct A *
和struct A
是8字节长,然后malloc分配8字节,因为它应该,但如果是这样,为什么使用sizeof?
sizeof
不返回分配的内存块的大小(C没有获得该信息的标准方法);它根据操作数的类型返回操作数的大小。因为指针的类型是struct A*
, sizeof操作数的类型是struct A
,所以sizeof总是返回8。
sizeof
返回10000。如果您没有为该对象分配足够的内存(例如,因为sizeof(int)