为什么我的 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 个字节)。
运营商sizeof
对malloc()
的调用一无所知(这是none的业务);您发布的代码中的 sizeof
表达式在编译时计算。
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 个字节)。
运营商sizeof
对malloc()
的调用一无所知(这是none的业务);您发布的代码中的 sizeof
表达式在编译时计算。