C++-数组为什么不让用户得到数组大小?
C/C++中,定义数组时要指定数组大小,这个数组大小系统应该是有保存的,不然动态数组的 delete[] 时系统怎么知道要销毁多少空间,那这个数组大小为什么不让用户可以取得啊,就像 Java 中的数组,是可以取得数组的 Length 的?
Java 中的数组是可以当作参数传递给函数的,但是C++中的数组当作参数传递的时候就退化成指针了,那样我们就必须再写一个数组大小的参数传递进去。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
虽然关联性不太大不过我记得C++下面的_countof的实现方法是类似这样的:
template<class clsName, int arraySize>
(char&)[arraySize] _countofHelper((clsName &array)[arraySize]);
#define _countof(a) sizeof(_countofHelper(a))
传一个指针或者重载了operator[]的对象进去的话会编译错误,而不像C下面的sizeof(a)/sizeof(a[0])那样返回错误的值
C和C++里面数组就是一片连续的内存空间,
数组名说白了就是一个地址常量,系统再分配内存的时候,只保存分配内存开始的地址和分配内存的大小,具体内存里面保存的是什么东西就不知道了有程序员维护。
具体看看这个讲的是malloc函数,和new、delete大同小异
http://blog.sina.com.cn/s/blog_4eb3f0090100d37a.html
Java中数组是一个对象,这个对象有自己的length属性
new或malloc申请内存的时候,返回的其实是一个struct的char*字段。其实在这个struct里是有记录长度的。比如:
struct MemBlock
{
int length;
char* data;
}
malloc返回的是data的值。调用free或delete指针的时候,系统会把从data-4的位置读取这个struct,所以能知道这个内存块的长度,并且正常销毁了。