关于C中关键字'return'的疑问

zha*_*eng -1 c

#include <stdio.h>

int* _pTest1(void) {
    int a = 10;
    int *_pA = &a;
    return _pA;
}

int* _pTest2(int a){
    int* _pA = &a;
    return _pA;
}


int main()
{
    int* _pT = _pTest1();
    printf("%d\n", *_pT);

    _pT = _pTest2(20);
    printf("%d\n", *_pT);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1073831176
20
Run Code Online (Sandbox Code Playgroud)

为什么第一个输出不是10,而是1073831176?func _pTest1中的'return _pA'和func _pTest2中的'return _pA'之间有什么区别?

Gri*_*han 5

在你的函数_pTest1_pTest2函数中,你都返回一个局部变量的地址,其a范围/生命只在函数内.a在函数外部访问变量是未定义的行为.

注意:在两个函数中都是函数a本地的(它们的内存来自堆栈).