问一个用sizeof 计算动态分配的数组大小的事

blizardskb8 2008-03-19 07:44:16
int* p;
p=new int[10];
数组的大小可以用10*sizeof int,来计算,还有没有更直接的办法?直接用sizeof p是不可以的,为什么?
...全文
3091 71 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
坚持自己 2008-03-24
  • 打赏
  • 举报
回复
mark
映维网 2008-03-23
  • 打赏
  • 举报
回复
用sizeof(p)/sizeof(int)
whxlove110 2008-03-23
  • 打赏
  • 举报
回复
用stl 吧,简单,方便
「已注销」 2008-03-23
  • 打赏
  • 举报
回复
长见识了
phb711 2008-03-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 taodm 的回复:]
楼主啊,既然在学C++,还是多学学vector取代数组吧。
[/Quote]
但是有时候,vector的效率确实比不上数组,特别是对于很大的循环运算时
axx1611 2008-03-23
  • 打赏
  • 举报
回复
sizeof能得到的大小必须是编译期就能确定的,否则都是指针的大小
monkeylzj 2008-03-23
  • 打赏
  • 举报
回复
[Quote=引用 68 楼 campuspuzzle 的回复:]
我刚才问过了,应该sizeof(ptr)==sizeof(*ptr[0])==200*sizeof(short)
_________________________________________________________________
在32位的机器上,从数字上看都是400,你为什么不在机器上测试一下?把short (*ptr[100])[200];改成
short (*ptr[50])[200];再看看结果是多少?
[/Quote]
应该这样理解:
short (*ptr[100])[200]; 首先ptr它是一个指针数组,它的每一个元素都是指向一个含200个shor类型元素的数组的指针.所以你只须清楚一点,ptr其实就是一个大小为100一维数组,只不过其所含元素是shor (*)[200]指针罢了,这样sizeof(ptr)就类似于求解过程:int a[100];sizeof(a)=100*sizeof(int) ; 所以:
sizeof(ptr)==100*sizeof(shor (*)[200])=100*4=400

campuspuzzle 2008-03-23
  • 打赏
  • 举报
回复
我刚才问过了,应该sizeof(ptr)==sizeof(*ptr[0])==200*sizeof(short)
_________________________________________________________________
在32位的机器上,从数字上看都是400,你为什么不在机器上测试一下?把short (*ptr[100])[200];改成
short (*ptr[50])[200];再看看结果是多少?
arong1234 2008-03-23
  • 打赏
  • 举报
回复
楼主17楼的说法是错误的,对齐问题是编译时决定的,一个结构的大小时在任何时候都可以用sizeof知道其大小的
whxlove110 2008-03-23
  • 打赏
  • 举报
回复
我对20楼的第二题答案,报怀疑态度
1.1 回答以下题目[答案在文章末尾]

short (*ptr[100])[200];

1. sizeof(ptr) =

2. sizeof(ptr[0]) =

3. sizeof(*ptr[0]) =

4. sizeof((*ptr[0])[0])) =   

  是不是又开始晕了。这里我们定义了一个100个指针数组,每个指针均指向有200个元素的数组,其内存占用为200*sizeof(short)字节。那么这100个数组指针的大小sizeof(ptr)为100*sizeof(short*)。接着,指针数组的第一个指针ptr[0]指向第一个数组,所以这个指针ptr[0]的大小实际上就是一个普通指针的大小,即sizeof(short*)。*ptr[0]指向第一个数组的起始地址,所以sizeof(*ptr[0])实际上求的是第一个组的内存大小200*sizeof(short)。(*ptr[0])[0])是第一个数组的第一个元素,因为是short型,所以这个元素的大小sizeof((*ptr[0])[0]))等价于sizeof(short)。


我刚才问过了,应该sizeof(ptr)==sizeof(*ptr[0])==200*sizeof(short
bigporker 2008-03-23
  • 打赏
  • 举报
回复
学习
campuspuzzle 2008-03-22
  • 打赏
  • 举报
回复
那C++里面又是怎么得到这个sizeof'a'=1的呢?
多使用容器来取代数组吧!
________________________________________
首先c里面是没有容器的,至于c里sizeof 'a'=sizeof(int),c++里sizeof 'a'=1没什么道理就是语言规范定义的,绝大多数学校可能c语言的实验环境是vc 6,在这样的环境下写c代码实际是c++代码,所以这些微小的区别看不出来了。
wpalhm 2008-03-22
  • 打赏
  • 举报
回复
多使用容器来取代数组吧!
hswawerk 2008-03-22
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 campuspuzzle 的回复:]
sizeof 'a' 是1,不是4
——————————————
c 和 c++不同的,哎,这问题是不是教材上没说清楚的原因。
[/Quote]

那C++里面又是怎么得到这个sizeof'a'=1的呢?
billy1985 2008-03-22
  • 打赏
  • 举报
回复
不错 学习了好多东西
MARK
antimatterworld 2008-03-22
  • 打赏
  • 举报
回复
STL比较难...我现在还没怎么掌握STL...
lyle3 2008-03-22
  • 打赏
  • 举报
回复
[code C/C++]
int a[10];
int n = sizeof a/ sizeof a[0];// n = 10;
[/code]
Rebornor 2008-03-22
  • 打赏
  • 举报
回复
学习下
ymcscu 2008-03-21
  • 打赏
  • 举报
回复
用C++是1 1 2 1

20楼的也说了,这里c和c++不同
加载更多回复(51)

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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