为什么我的sizeof(arr)/ sizeof(arr [0])= 1?

时间:2015-11-19 10:34:00

标签: c arrays pointers struct malloc

typedef struct {
  double *x;
  int points;
} Polygon;



polygon[cc].points = readobject(polygon[cc].file); //lets say equals 15
polygon[cc].x = (double *) malloc(polygon[cc].points * sizeof(double));

printf("%d\n", sizeof(polygon[cc].x) / sizeof(polygon[cc].x[0]));
//This prints out on 1

我测试x初始化为x[100]然后它可以正常工作,但malloc()调用不应该将结构数组设置为x[15]吗?它只是测量两个double的字节吗?

2 个答案:

答案 0 :(得分:6)

在您的代码中

polygon[cc].x

是一个指针。通过对该指针应用sizeof,得到的是指针本身的大小,而不是该指针指向的已分配内存的大小。

请记住,数组不是指针,因此如果在数组上应用sizeof,您将获得整个数组的大小。

在您的情况下,sizeof(double *)等于sizeof(double),因此您将结果设为1。

答案 1 :(得分:1)

polygon[cc].x的类型为double *polygon[cc].x[0]的类型为double

在您测试的计算机上,指针和双精度具有相同的大小(8字节)。

运营商sizeofmalloc()的呼叫一无所知(它没有任何业务);您发布的代码中的sizeof表达式将在编译时进行评估。