c中不支持函数返回局部变量的地址

在做列表中的栈这道题时,突然对函数能否返回局部变量的地址,比如自定义函数中的一个指针有一些疑惑,于是用下面的几个小程序做了验证
test1

#include <stdio.h>
#include <string.h>

char * fun(){
    char *str = (char *)malloc(100);
    scanf("%s", str);
    if(!strcmp(str, "push")) strcpy(str, "PUSH");
    if(!strcmp(str, "push")) strcpy(str, "POP");
    return str;
}
int main(){
    char a[10];
    strcpy(a, fun());
    printf("%s", a);
    return 0;
}

结果
在这里插入图片描述
test2

#include <stdio.h>
#include <string.h>

char * fun(){
    // char *str = (char *)malloc(100);
    char str[100];
    scanf("%s", str);
    if(!strcmp(str, "push")) strcpy(str, "PUSH");
    if(!strcmp(str, "push")) strcpy(str, "POP");
    return str;
}
int main(){
    char a[10];
    strcpy(a, fun());
    printf("%s", a);
    return 0;
}

结果
在这里插入图片描述
test2

#include <stdio.h>
#include <string.h>

char * fun(){
    // char *str = (char *)malloc(100);
    // char str[100];
    char static str[100];
    scanf("%s", str);
    if(!strcmp(str, "push")) strcpy(str, "PUSH");
    if(!strcmp(str, "push")) strcpy(str, "POP");
    return str;
}
int main(){
    char a[10];
    strcpy(a, fun());
    printf("%s", a);
    return 0;
}

结果
在这里插入图片描述

从上面的结果可以看出,c中不支持函数返回局部变量的地址,其实也就是常说的,函数中不能返回局部变量,因为在c中这些局部变量都是存储在栈中的,随着他们的作用域的消失而消失,局部变量的指针也是局部变量。如果我们要返回一个局部变量的指针,有两种方法,一、把这个指针声明为static。二、自己为这个指针所指的内容申请空间,这样的话只要自己没有释放这个变量,这个变量在整个程序的运行过程中就会一直存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值