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

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吗?我想知道我在想什么?


非常感谢任何建议,


MM们
浏览 711回答 3
3回答

HUH函数

你要的是a的大小char*确实是4,而不是缓冲区的大小。该sizeof运营商不能返回一个动态分配的缓冲区的大小,只有在编译时已知的静态类型和结构的大小。

千巷猫影

号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 == 4p = a2// sizeof a2 == 20// sizeof p still == 4这是数组和指针之间的主要区别。如果它不起作用,sizeof p将改变上面的代码,这对编译时常量没有意义。
打开App,查看更多内容
随时随地看视频慕课网APP