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
的字节吗?
答案 0 :(得分:6)
在您的代码中
polygon[cc].x
是一个指针。通过对该指针应用sizeof
,得到的是指针本身的大小,而不是该指针指向的已分配内存的大小。
请记住,数组不是指针,因此如果在数组上应用sizeof
,您将获得整个数组的大小。
在您的情况下,sizeof(double *)
等于sizeof(double)
,因此您将结果设为1。
答案 1 :(得分:1)
polygon[cc].x
的类型为double *
,polygon[cc].x[0]
的类型为double
。
在您测试的计算机上,指针和双精度具有相同的大小(8字节)。
运营商sizeof
对malloc()
的呼叫一无所知(它没有任何业务);您发布的代码中的sizeof
表达式将在编译时进行评估。