社区
C++ 语言
帖子详情
问一个用sizeof 计算动态分配的数组大小的事
blizardskb8
2008-03-19 07:44:16
int* p;
p=new int[10];
数组的大小可以用10*sizeof int,来计算,还有没有更直接的办法?直接用sizeof p是不可以的,为什么?
...全文
3091
71
打赏
收藏
问一个用sizeof 计算动态分配的数组大小的事
int* p; p=new int[10]; 数组的大小可以用10*sizeof int,来计算,还有没有更直接的办法?直接用sizeof p是不可以的,为什么?
复制链接
扫一扫
分享
转发到动态
举报
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
arong1234
2008-03-23
打赏
举报
回复
http://blog.csdn.net/arong1234/archive/2008/03/23/2210462.aspx
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)
50.
sizeof
计算
数组
元素个数.pdf
然而,使用
sizeof
来
计算
数组
大小
的方法有
一个
前提条件,那就是
数组
必须在编译时已定义且其生命周期至少覆盖到
sizeof
运算符的执行点。如果
数组
是
一个
函数的局部变量,并且在
sizeof
运算执行之前已经销毁,那么这样的...
sizeof
的用法(大全)
- 对于
动态分配
的
数组
,`
sizeof
`不能得到实际分配的长度,因为它只
计算
指针本身,如`
sizeof
(int*)`。 3. `
sizeof
`与函数参数: - 在函数参数传递中,`
sizeof
`只能用于局部变量,因为参数传递时,
数组
名会退化为...
sizeof
和strlen 区别.pdf
即使
数组
为空,`
sizeof
`也会返回
一个
非零值,表示
数组
类型的
大小
。 - 当
数组
作为参数传递时,由于函数参数传递机制,
数组
名会被转换为指向
数组
首元素的指针,因此`
sizeof
`
数组
名在函数内部依然返回
数组
类型的
大小
,...
Sizeof
与Strlen的区别与联系.pdf
这是因为
sizeof
(str1)、
sizeof
(str2)、
sizeof
(str3)、
sizeof
(str4)分别返回指针
大小
、
数组
大小
、只包含
一个
字符的
数组
大小
、包含8个字符的
数组
大小
。strlen(str1)、strlen(str2)、strlen(str3)、strlen(str4)分别...
Sizeof
与Strlen的区别与联系
- 对于
动态分配
的字符
数组
,`strlen` 仍然有效,但它只
计算
字符串的长度,而不是分配的内存
大小
。因此,使用 `
sizeof
` 会得到错误的结果,因为它返回的是指针本身的
大小
,而不是动态内存的
大小
。 举例说明: ```...
C++ 语言
65,180
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章