您的程序返回一个指针。它不是您在问题中提出的“数组”。因为数组的名称计算为其第一项的地址(与数组本身的地址相同)。
在 C 中,从main
函数返回的值被解释为退出状态,即$?
您的示例中使用的变量。
我猜,您正在运行 Bash shell,因为在 Bash 中,退出状态存储在$?
变量中。指针通常是一个大数字,至少大于255 ,这是Bash中的最大退出代码:
超出范围的退出值可能会导致意外退出代码。大于 255 的退出值会返回以 256 为模的退出代码。例如,退出 3809 给出的退出代码为 225 (3809 % 256 = 225)。
现在让我们通过打印变量的地址和以256为模 的地址来修改您的程序:
#include <stdio.h>
int main(void) {
static int x[3];
printf("%ld ==> %d\n", (size_t)x, (size_t)x % 256);
return (int)x;
}
让我们编译它并测试我是否正确:
$ gcc -Wall -g test.c -o test && ./test; echo $?
test.c: In function ‘main’:
test.c:6:12: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
return (int)x;
^
6295620 ==> 68
68
如我们所见,返回状态等于6295620 % 256
,正如官方文档中所记录的那样。