我定义了struct
:
struct Query {
int *pages;
int currentpage;
};
struct Query *new = malloc(sizeof(struct Query));
new->pages = malloc(sizeof(int) * 4);
然后我检查了new->pages
的大小以确保大小为4:
int size = sizeof(new->pages)/sizeof(new->pages[0]);
但是,size
不断返回2
而不是4
。
有谁知道我可能做错了什么?
感谢您的帮助。
答案 0 :(得分:8)
你的期望是错误的。
中的 sizeof(new->pages)
int size = sizeof(new->pages)/sizeof(new->pages[0]);
不会返回int
个元素的总数。只是int指针的大小(int*
)。由于您的平台上sizeof(int*)
为8且sizeof(int)
为4,因此返回2.
顺便说一句,您应该size_t
使用size
作为sizeof
运算符返回size_t
而%zu
是格式说明符({{1} }})打印printf()
。
答案 1 :(得分:2)
您看到了这一点,因为class Projects(APIView):
def post(self, request, format=None):
data=request.data
...
class SyncProjects(APIView):
def get(self, request, format=None):
PostContent={
'name':newProject["name"],
'projectParent':''
...
}
运算符产生其操作数类型的大小(以字节为单位),sizeof
的类型是指向整数的指针,由结构定义,因此它计算指针的大小,而不是数组。
请注意示例的不同之处:
new->pages
使用int arr[4] = {0,1,2,3};
int *p = arr;
printf("%zu\n", sizeof(arr)); // prints 16
printf("%zu\n", sizeof(p)); // prints 4
获取数组元素数量的惯例仅适用于数组,它不适用于指针,您必须自己跟踪长度。
答案 2 :(得分:0)
指针不是数组。尽管指针可以指向数组,但在指针上应用sizeof()
运算符会返回指针的大小,而不是指向它的数组的大小。
因此,为了跟踪大小,我建议您使用size_t
类型的变量来存储值(大小)。
哦,是的,如果您想使用c ++编译器,请不要将任何变量命名为new
!
struct Query {
int *pages;
int currentpage;
};
size_t size = 4;
struct Query *p = malloc(sizeof(struct Query));
p->pages = malloc(sizeof(int) * size);