gcc 4.4.1 c89我有以下代码片段:#include <stdlib.h>#include <stdio.h> char *buffer = malloc(10240); /* Check for memory error */ if(!buffer) { fprintf(stderr, "Memory error\n"); return 1; } printf("sizeof(buffer) [ %d ]\n", sizeof(buffer));但是,sizeof(缓冲区)总是打印4.我知道char *只有4个字节。但是,我已经分配了10kb的内存。那么尺寸不应该是10240吗?我想知道我在想什么?非常感谢任何建议,
3 回答
HUH函数
TA贡献1836条经验 获得超4个赞
你要的是a的大小char*
确实是4,而不是缓冲区的大小。该sizeof
运营商不能返回一个动态分配的缓冲区的大小,只有在编译时已知的静态类型和结构的大小。
千巷猫影
TA贡献1829条经验 获得超7个赞
号buffer是一个char *。它是指向char数据的指针。指针只占用4个字节(在您的系统上)。
它指向10240字节的数据(顺便说一下,它不是1Kb。更像是10Kb),但指针不知道这一点。考虑:
int a1[3] = {0, 1, 2};
int a2[5] = {0, 1, 2, 3, 4};
int *p = a1;
// sizeof a1 == 12 (3 * sizeof(int))
// but sizeof p == 4
p = a2
// sizeof a2 == 20
// sizeof p still == 4
这是数组和指针之间的主要区别。如果它不起作用,sizeof p将改变上面的代码,这对编译时常量没有意义。
- 3 回答
- 0 关注
- 710 浏览
添加回答
举报
0/150
提交
取消