【发布时间】:2010-09-16 21:43:07
【问题描述】:
这个问题的灵感来自一个类似的问题:How does delete[] “know” the size of the operand array?
我的问题有点不同:有没有办法以编程方式确定 C++ 数组的大小?如果不是,为什么?我见过的每个接受数组的函数也需要一个整数参数来指定它的大小。但正如链接问题所指出的,delete[] 必须知道要释放的内存大小。
考虑一下这个 C++ 代码:
int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));
这将打印“Size of arr: 4”,这只是指针的大小。有一些打印 256 的函数会很好,但我认为 C++ 中不存在这样的函数。 (同样,问题的一部分是为什么它不存在。)
澄清:我知道如果我在堆栈而不是堆上声明数组(即“int arr[256];”),sizeof 运算符将返回 1024(数组长度 * sizeof( int))。
【问题讨论】:
-
实际上,如果您在堆栈上分配数组,则 sizeof 运算符将返回 1024——即 256(元素的数量)* 4(单个元素的大小)。 (sizeof(arr)/sizeof(arr[0])) 将给出结果 256。
-
谢谢,我忽略了这一点,因为我实际上在我的测试代码中使用了 char[](并且 sizeof(char) == 1)
-
虽然这只是假设性的 - 因为它不起作用 - 我必须指出你应该写
printf("Size of arr: %d\n", sizeof(*arr));而不是printf("Size of arr: %d\n", sizeof(*arr));因为你希望检索取消引用指针的大小。
标签: c++ arrays pointers memory-management