typedef struct
{
int array[];
...
} SoftArray;
SoftArray* create_soft_array(int size)
{SoftArray* ret = NULL;
if( size > 0 )
{
ret = (SoftArray*)malloc(sizeof(*ret) + sizeof(*(ret->array)) * size);
ret->len = size;
}
return ret;
}
Q: ret 为NULL,访问ret->array为什么没有导致程序奔溃呢
这里没有访问ret->array(即没要它的地址),只是要了array的类型。 ret为SoftArray * 类型
在编译的时候 管它ret是不是Null。 在sizeof里面 只取它的类型就OK。(
sizeof不会访问,只是确定数据类型)
//sizeof(*ret)在编译阶段就确定,为结构体SoftArray大小
*(ret->array)为结构体中array数组类型大小,若为int型,则为4字节