#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个整数,这可以是那个内存地址中的任何随机数?另外,如果您能够将(&arr + 1)解引用为int类型,那么如何从arr中减去该值
发布于 2020-04-30 11:29:11
*(&arr + 1) - arr是编写6的一种非常复杂的方法。
&arr是指向int[6]的指针
(&arr + 1)是指向一个int[6]的指针,该指针在arr中的第一个之后开始,即它在内存中高出6int。
*(&arr + 1)是arr之后虚构的数组。那里没有数组,但我们不会使用它,所以这并不重要。
在*(&arr + 1) - arr中,在应用差运算之前,两个整数数组被转换为指向其第一个元素的int *指针。由于这些数组在内存中相隔6个int,因此这两个指针之间有6个int,结果是6。
https://stackoverflow.com/questions/61515010
复制相似问题