C语言 为什么我的 sizeof(arr) / sizeof(arr[0]) = 1


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("%dn", sizeof(polygon[cc].x) / sizeof(polygon[cc].x[0]));
//This prints out on 1

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

在你的代码中

polygon[cc].x

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

请记住,数组

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

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

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

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

运算符sizeofmalloc()调用一无所知(这不关它的事(;你发布的代码中的sizeof表达式在编译时被计算。

相关内容

  • 没有找到相关文章