社区
C++ 语言
帖子详情
问一个用sizeof 计算动态分配的数组大小的事
blizardskb8
2008-03-19 07:44:16
int* p;
p=new int[10];
数组的大小可以用10*sizeof int,来计算,还有没有更直接的办法?直接用sizeof p是不可以的,为什么?
...全文
3101
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
50.
sizeof
计算
数组
元素个数
sizeof
的用法(大全)
全面的讲解
sizeof
的用法及与strlen()的比较,突破
sizeof
的难点解疑
sizeof
和strlen 区别.pdf
总结
sizeof
和strlen的区别:
sizeof
(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即
计算
好了,参数可以是
数组
、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节
大小
。 由于在编译时
计算
,因此
sizeof
不能用来返回
动态分配
的内存空间的
大小
。实际上,用
sizeof
来返回类型以及静态分配的对象、结构或
数组
所占的空间,返回值跟对象、结构、
数组
所存储的内容没有关系。 strlen(...)是函数,要在运行时才能
计算
。参数必须是字符型指针(char*)。当
数组
名作为参数传入时,实际上
数组
就退化成指针了。 strlen(...)的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第
一个
地址开始遍历,直到遇到结束符NULL。返回的长度
大小
不包括NULL。
Sizeof
与Strlen的区别与联系.pdf
。。。
Sizeof
与Strlen的区别与联系
sizeof
(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即
计算
好了,参数可以是
数组
、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节
大小
。 strlen(...)是函数,要在运行时才能
计算
。参数必须是字符型指针(char*)。当
数组
名作为参数传入时,实际上
数组
就退化成指针了。 它的功能是。。。。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章