C++ 指针算术问题(数组大小)[C+;+;] #包括 使用名称空间std; int main() { int arr[]={1,2,3,4,5,6}; int size=*(&arr+1)-arr; 返回0; }

C++ 指针算术问题(数组大小)[C+;+;] #包括 使用名称空间std; int main() { int arr[]={1,2,3,4,5,6}; int size=*(&arr+1)-arr; 返回0; },c++,arrays,pointers,pointer-arithmetic,C++,Arrays,Pointers,Pointer Arithmetic,int size=*(&arr+1)-arr精确查找数组的大小?我读过Geeksforgek的解释,但还是有点困惑。我想如果你取消引用(&arr+1),那么它会给你一个不存在的值,因为你正在向前跳过6个整数,这可能是内存地址中的任意随机数?而且,如果您能够将(&arr+1)解引用到int类型,那么如何从arr中减去该值?*(&arr+1)-arr是一种非常复杂的写入6的方法 &arr是指向int[6] (&arr+1)是指向int[6]的指针,该指针在arr处开始,即,它在内存中比int高6 *

int size=*(&arr+1)-arr精确查找数组的大小?我读过Geeksforgek的解释,但还是有点困惑。我想如果你取消引用(&arr+1),那么它会给你一个不存在的值,因为你正在向前跳过6个整数,这可能是内存地址中的任意随机数?而且,如果您能够将(&arr+1)解引用到int类型,那么如何从
arr
中减去该值?

*(&arr+1)-arr
是一种非常复杂的写入
6
的方法

&arr
是指向
int[6]

(&arr+1)
是指向
int[6]
的指针,该指针在
arr
处开始,即,它在内存中比int
高6


*(&arr+1)
arr
之后的虚拟数组。那里没有数组,但我们不打算使用它,所以这无关紧要


*(&arr+1)-arr
中,在应用差分操作之前,两个整数数组将转换为指向其第一个元素的
int*
指针。由于这些数组在内存中相距6
int
s,因此这两个指针之间有6
int
s,结果是6。

这可能对您有用。这将100%的帮助:有另一个问题正是关于这一点,但该网站没有正确地搜索&x+1等;(或者,为了讨论这是否合法,我最初也在想,但它应该定义为行为!”这里没有数组,但我们不打算使用它,所以这无关紧要-代码在技术上仍然是未定义的行为,因为
*
运算符的语义仅在指针指向有效对象的情况下定义,从而使行为因遗漏而未定义。关于主题存在一个公开的CWG问题
#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 
    int  arr[] = {1, 2, 3, 4, 5, 6}; 
    int size = *(&arr + 1) - arr; 

    return 0; 
}