#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6};
int size = *(&arr + 1) - arr;
return 0;
}
int size = *(&arr + 1) - arr;
如何准确找到数组的大小?我已经阅读了极客的解释,但仍然有点困惑。我想如果你取消引用(&arr + 1),那么它会给你一个不存在的值,因为你跳过了6个整数,这可能是该内存地址中的任何随机值?而且,如果您能够取消对 int 类型的引用 (&arr + 1),那么您如何从arr
中减去该值?
*(&arr + 1) - arr
是一种非常复杂的编写6
的方法。
&arr
是指向int[6]
的指针
(&arr + 1)
是一个指针,指向在arr
开始的int[6]
,即它的内存高6int
秒。
*(&arr + 1)
是arr
之后的假数组。 那里没有数组,但我们不打算使用它,所以没关系。
在*(&arr + 1) - arr
中,在应用差分运算之前,两个整数数组被转换为指向它们的第一个元素的int *
指针。 由于这些数组在内存中相隔 6int
s,因此这两个指针之间有 6int
s,结果为 6。