指针在这里如何工作?

0 c pointers

如果控制返回到main()变量之后,如果从堆栈中删除了i仍然是5,因为我在main()中不存在并且指针指向的变量不是存在.

#include<stdio.h>

int* sum() {
    int i=5;
    int*a=&i;
    printf("%d\n",a);
    return a;
}

int main() {
    int* a=sum();
    printf("%d\n",a);
    printf("%d",*a);
}
Run Code Online (Sandbox Code Playgroud)

输出:

2293252
2293252
5
Run Code Online (Sandbox Code Playgroud)

Gop*_*opi 6

你看到的是未定义的行为.

将函数导致的局部变量的地址返回到未定义的行为.

因此,结果可能不会像所有平台上预期的那样.

int i=5;
Run Code Online (Sandbox Code Playgroud)

是一个局部变量,您返回此变量的地址.退出函数后,此变量不再有效,因此在其范围之外访问它是未定义的行为.不应从函数返回存储此局部变量的地址.或者你可以做

int* sum()
{
    int*a =  malloc(sizeof(int));
    *a = 5;
    printf("%d\n",*a);
    return a;
}
Run Code Online (Sandbox Code Playgroud)

PS:printf("%p",(void*)a);应该用于打印指针,使用错误的格式说明符导致未定义的行为.