我想知道在byte
中使用double *buf = (double *) calloc(5, sizeof(double));
printf("%zu \n", sizeof(buf));
分配的缓冲区的大小。通过在我的机器中测试以下内容:
sizeof
结果是8,即使我只改为一个元素,我仍然得到8.我的问题是:
char
将返回40)。int
,double
,float
还是Toast.makeText(getApplicationContext(), "http://localhost/moodle/webservice/rest/server.php?wstoken=0ac06623c66a3dd0e0e431f872a74710&wsfunction=core_user_create_users", Toast.LENGTH_LONG).show();
)? 任何想法都表示赞赏。
答案 0 :(得分:6)
引用C11
,章节§6.5.3.4,(强调我的)
sizeof
运算符产生其操作数的大小(以字节为单位),可以是 表达式或类型的括号名称。 大小取决于类型 操作数。 [...]
因此,使用sizeof
无法获得指针指向的内存位置的大小。你需要自己跟踪。
详细说明,你的情况相当于sizeof (double *)
,它基本上根据你的环境给你一个指针的大小(加倍)。
没有通用或直接的方法从内存分配器函数获取已分配内存的大小。但是,您可以使用 sentinel value 标记已分配缓冲区的结尾并使用循环,您可以检查该值,但这意味着
根据您的需要选择。
答案 1 :(得分:2)