首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言中的局部变量

请看下面 的程序:

#include

int* fun() {

int a, *p = &a;

a=3;

return p;

}

int main()

{

int *s;

s = fun();

printf("s=%d\n",*s);

return 0;

}

你认为这个程序正确吗?

如果仅仅针对这个程序来说,可以说是正确的,如果这个程序后续仍然使用变量s的话会不会出错呢?

答案是会的。主要原因是C语言在处理局部变量时的局限性,fun()返回的值,保存在局部存储区(堆栈)中,当函数结束时,局部变量消失,虽然在主程序中仍然可以使用这个值,但它已经属于垃圾被系统自动回收。

运行下面的程序,查看运行结果,请问两次输出s的值都一样吗?

分析为什么会是这样的结果。

#include

int* fun() {

int a, *p = &a;

a=3;

return p;

}

void fun1() {

int a=4;

printf("a=%d\n",a);

return ;

}

int main()

{

int *s;

s = fun();

printf("s=%d\n",*s);

fun1();

printf("s=%d\n",*s);

return 0;

}

go语言在处理局部变量时就非常灵活,把上面的程序改成go语言编写,其运行结果可保证s的值不变。

package main

import (

"fmt"

)

func fun() (*int) {

a := 3

return &a

}

func fun1() {

a := 4

fmt.Printf("a=%d\n",a)

}

func main() {

s := fun()

fmt.Printf("s=%d\n",*s)

fun1()

fmt.Printf("s=%d\n",*s)

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180731G1FGKE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券