【发布时间】:2018-12-05 23:01:30
【问题描述】:
这是说明问题的以下代码:
#include <stdio.h>
void func(int arr[]);
int main() {
int arr[10];
int n = *(&arr + 1) - arr;
printf("%d\n", n);
func(arr);
return 0;
}
void func(int arr[]) {
int n = *(&arr + 1) - arr;
printf("%d\n", n);
}
以上代码的输出为:
10
268435906
【问题讨论】:
-
int n=*(&arr+1)-arr;..你确定吗? -
@SouravGhosh 不,这是正确的(因为它很可能会工作,即使它在技术上是无效的)。
&arr + 1是一个指向数组的指针,解除对它的引用(即*(&arr + 1)),你会得到一个数组,然后它会衰减为指向其第一个元素的指针(它将指向arr末尾之外的一个元素,即有效地指向arr[10])。 -
@JensGustedt:这个问题不是完全重复的,它使用不同的表达式来计算数组大小。