这个问题是受到一个类似的问题的启发: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))。
printf("Size of arr: %d\n", sizeof(*arr));
而不是printf("Size of arr: %d\n", sizeof(*arr));
,因为你想要检索解引用指针的大小。 - mg30rg