指针算术问题(数组大小)[C++]


#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 *指针。 由于这些数组在内存中相隔 6ints,因此这两个指针之间有 6ints,结果为 6。

相关内容

  • 没有找到相关文章

最新更新