C:使用函数返回的指针访问连续的数组元素

时间:2013-06-16 14:22:06

标签: c arrays pointers

在下面的程序中,我得到了输出 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;
}

请在我的代码或我的推理中提出任何问题。为什么我会遇到这种不寻常的行为?

3 个答案:

答案 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;
}