返回本地变量的地址是危险的

//返回本地变量的地址是危险的,本地变量结束后地址会重新分配给其他地方使用
//返回全局变量或静态本地变量的地址是安全的的
//返回在函数内malloc的内存是安全的的,但是容易造成问题
//最好的做法是返回传入的指针

#pragma warning(disable : 4996)

#include <iostream>
#include<stdio.h>

int *f(void); 
int *g(void);
int main() {
    int *p = f();
    printf("*p = %d\n", *p);
     g();
    printf("*p = %d\n", *p);

    return 0;

}
int *f(void) {
    int i = 123;
    printf("i = %d\n", i);
    printf("&i = %p\n", &i);
    return &i;
}
int *g(void) {
    int k = 78;
    printf("k = %d\n", k);
    printf("&k = %p\n", &k);
    return &k;
}
/*------------------------------
i = 123
&i = 001FFD60
*p = 123
k = 78
&k = 001FFD60
*p = 78
-----------------------------------*/


//不要使用全局变量来在函数间传递参数和结果
//尽量避免使用全局变量
//丰田汽车的案子
//使用全局变量和静态本地变量的函数是线程不安全的

posted @ 2022-01-11 10:08  江南王小帅  阅读(79)  评论(0)    收藏  举报