0

在以下程序中,我得到输出 1 0 0 2130567168 11 2686668 7 2686916

而根据我的说法,输出必须是 1 2 3 4 5 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;
}

请提出我的代码或推理中的任何问题。为什么我会出现这种异常行为?

4

3 回答 3

3

该数组a具有自动存储持续时间,该持续时间在函数fun3()返回时结束。这意味着在此之后访问它是不合法的 - 这样做具有未定义的行为,这意味着任何事情都可能发生。

于 2013-06-16T14:24:41.627 回答
1

的生命周期int a[]仅限于fun3,因此您不能将其退回并期望它保持有效。

于 2013-06-16T14:24:41.717 回答
0

int a[]of functionfun3是局部作用域。如果您退出此功能,则 a 的范围不再有效。这是一种方式,因为由于auto变量是存储类,例如要更改static.

int *fun3(){
    static int a[] = {1,2,3,4,5,6,7,8};
    return a;
}
于 2013-06-16T14:30:13.553 回答