怎么用sizeof取指针的指向内容的大小

gjunyu1982 2006-02-06 05:59:06
不管是什么类型的*p
取得p指向的内存的空间的大小
...全文
6638 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kprzen 2006-02-08
  • 打赏
  • 举报
回复
过路,我建议楼主去看看林锐博士的<<高质量C++/C编程指南>>
prostar 2006-02-07
  • 打赏
  • 举报
回复 1
比如
char buffer[100];
char* p = buffer ;

int bufsize = sizeof( buffer ) / sizeof( *p ) ;

可以看到,bufsize是100,得到了那个数组的大小。或者这些写更直观:

int bufsize = sizeof( buffer ) / sizeof( buffer[0] ) ;
fine10000 2006-02-07
  • 打赏
  • 举报
回复
mark
gnixemos 2006-02-07
  • 打赏
  • 举报
回复 1
malloc的内存可以用
_msize
  • 打赏
  • 举报
回复
学习
huanmm 2006-02-07
  • 打赏
  • 举报
回复
sizeof(*p);
如果指针指向的是单个变量还可以这样用
但是如果指向的是一个数组就不行了,只能得到数组第一个元素的长度
yun3 2006-02-07
  • 打赏
  • 举报
回复
标准C下sizeof(* p) 不能实现。
首先,你定义的* p就有类型,因此,你输出的* p 肯定是指针型。
16位编辑器 为2。
digifish 2006-02-07
  • 打赏
  • 举报
回复
标准C是无能为力了。在Windows下用VC的话,到可能有些办法,比如用API函数HeapSize( GetProcessHeap(), 0, p);
iamcaicainiao 2006-02-06
  • 打赏
  • 举报
回复 1
用运算符sizeof可以计算出数组的容量(字节数)。示例7-3-3(a)中,sizeof(a)的值是12(注意别忘了’\0’)。指针p指向a,但是sizeof(p)的值却是4。这是因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量。

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。示例7-3-3(b)中,不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *)。

char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12字节
cout<< sizeof(p) << endl; // 4字节
示例7-3-3(a) 计算数组和指针的内存容量

void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4字节而不是100字节
}
示例7-3-3(b) 数组退化为指针

还有一种可能是,你确信指针指向连续的内存,尾巴的地方是NULL,也可以确定。否则,应该木有办法吧。
jww_in_windows 2006-02-06
  • 打赏
  • 举报
回复
同意楼上的
JustNewBie 2006-02-06
  • 打赏
  • 举报
回复
sizeof(*p);

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧