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 字节(。
运算符sizeof
对malloc()
调用一无所知(这不关它的事(;你发布的代码中的sizeof
表达式在编译时被计算。