C++-数组为什么不让用户得到数组大小?

发布于 2016-12-05 00:03:56 字数 207 浏览 1251 评论 3

C/C++中,定义数组时要指定数组大小,这个数组大小系统应该是有保存的,不然动态数组的 delete[] 时系统怎么知道要销毁多少空间,那这个数组大小为什么不让用户可以取得啊,就像 Java 中的数组,是可以取得数组的 Length 的?

Java 中的数组是可以当作参数传递给函数的,但是C++中的数组当作参数传递的时候就退化成指针了,那样我们就必须再写一个数组大小的参数传递进去。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜柠檬 2017-07-27 04:46:38

虽然关联性不太大不过我记得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])那样返回错误的值

想挽留 2017-07-25 14:31:27

C和C++里面数组就是一片连续的内存空间,

数组名说白了就是一个地址常量,系统再分配内存的时候,只保存分配内存开始的地址和分配内存的大小,具体内存里面保存的是什么东西就不知道了有程序员维护。
具体看看这个讲的是malloc函数,和new、delete大同小异
http://blog.sina.com.cn/s/blog_4eb3f0090100d37a.html

Java中数组是一个对象,这个对象有自己的length属性

清晨说ぺ晚安 2017-02-17 03:00:10

new或malloc申请内存的时候,返回的其实是一个struct的char*字段。其实在这个struct里是有记录长度的。比如:

struct MemBlock
{
int length;
char* data;
}

malloc返回的是data的值。调用free或delete指针的时候,系统会把从data-4的位置读取这个struct,所以能知道这个内存块的长度,并且正常销毁了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文