社区
C++ 语言
帖子详情
问一个用sizeof 计算动态分配的数组大小的事
blizardskb8
2008-03-19 07:44:16
int* p;
p=new int[10];
数组的大小可以用10*sizeof int,来计算,还有没有更直接的办法?直接用sizeof p是不可以的,为什么?
...全文
3136
71
打赏
收藏
问一个用sizeof 计算动态分配的数组大小的事
int* p; p=new int[10]; 数组的大小可以用10*sizeof int,来计算,还有没有更直接的办法?直接用sizeof p是不可以的,为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
计算
数组
元素个数
C语言
sizeof
计算
数组
元素[项目源码]
本文介绍了在C语言中使用
sizeof
关键字
计算
数组
元素个数的方法。通过示例代码展示了如何
计算
数组
所占内存空间的总
大小
以及单个元素的
大小
,进而通过总
大小
除以单个元素
大小
得到
数组
元素的个数。这种方法具有通用性,无论
数组
如何变化,都能准确
计算
出元素的个数。文章内容简洁明了,适合初学者理解和掌握。
sizeof
的用法(大全)
全面的讲解
sizeof
的用法及与strlen()的比较,突破
sizeof
的难点解疑
sizeof
和strlen 区别.pdf
总结
sizeof
和strlen的区别:
sizeof
(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即
计算
好了,参数可以是
数组
、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节
大小
。 由于在编译时
计算
,因此
sizeof
不能用来返回
动态分配
的内存空间的
大小
。实际上,用
sizeof
来返回类型以及静态分配的对象、结构或
数组
所占的空间,返回值跟对象、结构、
数组
所存储的内容没有关系。 strlen(...)是函数,要在运行时才能
计算
。参数必须是字符型指针(char*)。当
数组
名作为参数传入时,实际上
数组
就退化成指针了。 strlen(...)的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第
一个
地址开始遍历,直到遇到结束符NULL。返回的长度
大小
不包括NULL。
C语言
sizeof
()详解[项目代码]
本文详细介绍了C语言中
sizeof
()运算符的使用方法及其在不同场景下的应用。
sizeof
()可以
计算
操作数的
大小
,返回无符号整数类型size_t。文章通过示例代码展示了
sizeof
()如何应用于基本数据类型(如int、float、char等)、表达式以及
数组
元素数量的
计算
。此外,还介绍了
sizeof
()在动态内存分配中的重要作用,例如通过
sizeof
(int)来分配足够的内存空间。最后,文章提供了利用
sizeof
()
计算
数组
长度的实用方法,即
数组
长度等于
数组
总
大小
除以单个元素
大小
。这些内容为C语言开发者提供了全面的
sizeof
()使用指南。
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章