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

Why does my 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("%d\n", 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()的调用一无所知(这是none的业务);您发布的代码中的 sizeof 表达式在编译时计算。