在下面的代码中,我初始化了一个 int 指针,然后动态分配了内存。
但是当我想显示数组的大小时,它不会显示值5:
int *p=NULL;
int tab[]={};
p=tab;
p=malloc(5*sizeof(int));
printf("sizeof(tab)=%d",(int)sizeof(tab));
Run Code Online (Sandbox Code Playgroud)
int *p=NULL;定义p为指针并将其初始化为空指针。
int tab[]={};C 标准没有定义,因为标准要求数组非空。但是,一些编译器会允许这样做并创建一个长度为零的数组。(除了作为结构的最后一个成员或联合的成员之外,这种数组基本上没有用处。)
p=tab;如果数组不为空,则设置p为指向第一个元素的位置tab。
p=malloc(5*sizeof(int));为 5 保留内存int并设置p为指向该内存。
printf("sizeof(tab)=%d",(int)sizeof(tab));打印tab. 由于tab是一个零长度数组,它在支持它的实现中打印“sizeof(tab)=0”。
此外,如果你打印了sizeof p,它会打印指针p的大小,而不是它指向的大小。sizeof报告有关其操作数类型的信息。类型是编译时信息。sizeof不报告执行时间信息,例如在某个位置保留了多少内存。(除了它会报告可变长度数组的大小。)