在下面的程序中,我得到了输出 1 0 0 2130567168 11 2686668 7 2686916
而根据我的说法,输出必须是 1 2 3 4 五 6 7 8
因为数组元素存储在连续的内存位置,我以连续的方式访问这些元素。
#include<stdio.h>
#include<stdlib.h>
int *fun3();
int main(){
int j, k;
int *q = fun3();
for(j = 0; j < 8; j++){
printf("%d\t", *(q+j));
}
}
int *fun3(){
int a[] = {1,2,3,4,5,6,7,8};
return a;
}
请在我的代码或我的推理中提出任何问题。为什么我会遇到这种不寻常的行为?
答案 0 :(得分:3)
数组a
具有自动存储持续时间,该时间在函数fun3()
返回时结束。这意味着在此之后访问它是不合法的 - 这样做有未定义的行为,这意味着任何事情都可能发生。
答案 1 :(得分:1)
int a[]
的有效期仅限于fun3
,因此您无法退回并希望它保持有效。
答案 2 :(得分:0)
int a[]
的 fun3
是本地范围。如果您退出此功能,则a的范围不再有效。这是一种方式,因为auto
变量是存储类,例如更改static
。
int *fun3(){
static int a[] = {1,2,3,4,5,6,7,8};
return a;
}