c-为什么sizeof打印的是8而不是12

  • 本文关键字:打印 sizeof c memory sizeof
  • 更新时间 :
  • 英文 :


我正在做一个结构的简单程序,为该结构分配了12个字符的内存。name(第14行(,但sizeof(p[I].name((第32行(的打印显示的是8而不是12。为什么要这样做?

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
typedef struct person{
char *name;
uint32_t age; 
}person_;
int main()
{
person_ p[3];
uint32_t i,j;
for(i = 0;i<3;i++){
p[i].name = malloc(sizeof(char) * 12);
if(p[i].name == NULL){
fprintf(stderr,"Error allocating memoryn");
for(j = 0;j<i;j++){
free(p[i].name);
}
exit(1);
}
}
for(i = 0;i<3;i++){
if(fgets(p[i].name,sizeof(p[i].name),stdin) == NULL){
fprintf(stderr,"Error reading stringn");
exit(2);
}
}
for(i = 0;i<3;i++){
printf("%s",p[i].name);
printf("sizeof(%d)",sizeof(p[i].name));
}
for(j = 0;j<3;j++){
free(p[j].name);
}
}

好吧,p[i].namechar *,也就是说,指向字符的指针。指向平台上字符的指针大小为8个字符。因此sizeof(p[i].name)返回8。

请注意对象的大小与其值无关。因此,p[i].name指向其中有12个字符的某个位置对p[i].name本身的大小没有影响。

想想看,如果执行p[i].name = NULL;会改变p[i].name大小,那会有多奇怪。这12个字符仍然是相同的大小,并且p[i].name仍然有4个字符持有NULL

当你为一个对象分配空间时,你在知道它的值之前就已经这样做了。所以大小不能取决于值。

相关内容

  • 没有找到相关文章

最新更新