为了账号安全,请及时绑定邮箱和手机立即绑定

将sizeof与动态分配的数组一起使用

将sizeof与动态分配的数组一起使用

C
MM们 2019-09-06 16:16:15
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运营商不能返回一个动态分配的缓冲区的大小,只有在编译时已知的静态类型和结构的大小。


查看完整回答
反对 回复 2019-09-06
?
千巷猫影

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将改变上面的代码,这对编译时常量没有意义。


查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 710 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信