相关疑难解决方法(0)

通过C++标准的下标:legal来获取一个过去的数组元素的地址?

我已经看过它多次断言现在C++标准不允许使用以下代码:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
Run Code Online (Sandbox Code Playgroud)

&array[5]在这种情况下是合法的C++代码吗?

如果可能的话,我想要一个参考标准的答案.

知道它是否符合C标准也很有趣.如果它不是标准的C++,为什么决定做出从不同的治疗呢array + 5还是&array[4] + 1

c c++ standards language-lawyer

75
推荐指数
6
解决办法
6741
查看次数

*(&arr + 1) - arr 如何给出数组大小

int arr[] = { 3, 5, 9, 2, 8, 10, 11 };      
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
Run Code Online (Sandbox Code Playgroud)

我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。

c++ arrays

36
推荐指数
4
解决办法
3430
查看次数

通过指针算法计算数组长度

我想知道它*(&array + 1)是如何工作的.我认为这是一种计算数组长度的简单方法,并希望在使用之前正确理解它.我对指针算法不是很熟悉,但是我的理解 &array给出了数组第一个元素的地址.(&array + 1)会在地址方面转到数组的末尾.但是不应该*(&array + 1)给出这个地址的价值.相反,它打印出地址.我真的很感谢你的帮助,让我的脑袋里的指针清晰.

这是我正在研究的一个简单例子:

int numbers[] = {5,8,9,3,4,6,1};
int length = *(&numbers + 1) - numbers;
Run Code Online (Sandbox Code Playgroud)

c c++ arrays pointers pointer-arithmetic

9
推荐指数
2
解决办法
331
查看次数

为什么 * 需要放在 (&amp;a) 之前来减去 a(a 是一个数组)?

我正在学习如何找到数组的长度,但我对这个解决方案感到困惑。我试图在网上找到解释,但似乎没有。

int arr[5] = {5, 8, 1, 3, 6};
   int len = *(&arr + 1) - arr;
   cout << "The length of the array is: " << len;
Run Code Online (Sandbox Code Playgroud)

c++ pointers

9
推荐指数
2
解决办法
176
查看次数