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*
指针。由于这些数组在内存中相距6int
s,因此这两个指针之间有6int
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;
}