C语言 如何输出指针所指向空间的大小

C语言如何输出指针所指向空间的大小... C语言 如何输出指针所指向空间的大小 展开
 我来答
kaixingui2012
推荐于2017-09-28 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6128万
展开全部

C语言无法输出指针所指向的空间的大小!

一般,我们获取一个变量所占内存空间的方法为:sizeof(变量名或类型名),如:

int a;
int aa[10];
int *p=aa;
printf("sizeof(int)=%d\n", sizeof(int) );  //现在的机器一般为32位或64位机,int类型占四个字节,所以输出4
printf("sizeof( a )=%d\n", sizeof(a) );  //输出4
printf("sizeof( aa )=%d\n", sizeof(aa) );  //输出4*10=40
printf("sizeof(p)=%d\n", sizeof(p) );//输出4 ?见下面说明
printf("sizeof(int *)=%d\n", sizeof(int *) );//输出4 ?见下面说明

指针变量定义:用来存储内存地址的变量。指针变量中存储的是内存地址数据(一个整型数),而不是真正的数据,真正的数据是在地址中存放的。所以,指针变量实际上就是个整型变量,用sizeof命令去获取任意类型的指针变量都会得到4。

指针变量存储的是一个存储空间的首地址,究竟这个空间有多大,可以存储多少个数据,这是分配空间时所决定的。单独看一个地址值,是看不出其空间大小的。如:

int a;

int aa[10];

int *p ; //定义一个指针变量

p=aa ; //指向数组aa,aa的数据空间是40字节,10个整数

p=&a; //指向一个整型变量,它的存储空间是4字节,一个整数

陈学阳
2010-09-15 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2.1万
采纳率:14%
帮助的人:5369万
展开全部
堆上分配的空间要手动释放,栈上的空间由系统释放
比如用malloc分配的是在堆上的,所以要用free手动释放
栈上空间比如说函数传如的值,由系统自动释放
比如 int* a = malloc(100);
要free(a)释放a指向的内存,但a这个变量所占的空间不用管它,系统自动会处理的

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xingz1234
2012-02-25 · 超过11用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:61.2万
展开全部
C++里有_msize,但是C里面没有这样的函数,唯一的方法,可以试试 memcpy+strlen,把指向空间数据拷贝出来转换成char相关类型,然后用strlen来求,记得别忘记memset初始化转向的空间噢,不然可能会计算出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenzhongy123
2010-09-15
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
用sizeof(p)计算出的是指针的大小,固定值4,
sizeof(*p)就可以计算出指针所指的空间的大小。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e804039
2020-07-02
知道答主
回答量:17
采纳率:0%
帮助的人:5.8万
展开全部
如果说你的意思是获得A类型指针 A_p 所指的实体a的大小:

如果你知道指针的类型,那么你就能知道 它所指向的实体类型的空间大小;
可以使用 sizeof(A) 或者sizeof(*A_p) 还获取它所指向内容的大小。
这只是在指针指向内容被你认为是特定类型的前提下。

C的不安全特性之一,就是指针想怎么指就怎么指,所以指针只能说 你把它指向的内容当做什么,但不代表内容就是什么。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式