C/C++ 子函数返回局部变量、指针 和改变指针指向
来源:互联网 发布:淘宝图片空间复制 编辑:程序博客网 时间:2024/04/29 20:48
1>子函数返回局部变量
例子1:
上面的简单程序,大家应该都知道应该会输出什么。是的,输出如下图:
引出的思考:子函数doubletimes()中的返回变量k是局部变量,返回到主函数后该变量超出了作用域,已经被销毁了,为什么主函数中的变量m还会等于20呢?
引出的结论:C语言中参数的传递(包括输入参数和返回参数)实质上都是传递的参数的拷贝。
在上面例子中,子函数返回值k=20,实际返回的不是变量k,而是会将变量k复制一份,返回副本。
2> 子函数返回局部指针
指针也是变量,只不过指针变量的值表示的是内存中的地址而已。所以例子1引出的结论在这里也适合指针变量
例子2:
虽然在子函数doubletimes()中返回的指针变量n在return后会“销毁”,但是它的副本会被返回到main()函数中,并赋值给指针变量k。
输出结果如下图:
k比n大4的原因是,上例中的变量是int类型的,我的编译环境决定了int类型占4个字节。
3> 通过子函数修改main函数的变量
例子3:
通过例子1,想一下上面例子会返回什么呢??
由于 参数传递只是副本的传递,那么传进子函数doubletimes()中的变量n不是main函数中的变量n,而是其副本。在子函数中修改副本的值,对main函数中的变量n是没有影响的。返回值如下图:
那么该如何在子函数中修改main函数中的变量呢??
例子4:
记住两点:指针也是变量;通过指针变量能间接访问其他变量并修改其值。
例4中的内存示意图如下图:
由上图可知:在子函数中也可返回main函数中的变量n,并可修改其值。程序出如下图:
4>通过子函数修改main()函数中指针变量
指针变量的值即指针所指向变量的地址。
例4的内存结构图如下图:
在子函数中可间接访问main函数中的指针变量n,从而改变其值,也就改变了指针n的指向了。
输出结果如下图:
总结:
想要在子函数中修改main函数中变量的值,需要传更高一级的变量到子函数。例如,改变普通变量的值,需要传一级指针;改变一级指针的值需要传二级指针等等。
- C/C++ 子函数返回局部变量、指针 和改变指针指向
- C语言 子函数返回一个局部指针变量的疑惑
- C语言 子函数return(局部变量&局部指针&栈)机制
- C语言 子函数return(局部变量&局部指针&栈)机制 笔记
- 不要返回指向局部变量的指针
- 关于C语言中返回局部变量和局部指针变量
- 关于C语言中返回局部变量和局部指针变量
- C指针以及为什么不能返回局部指针变量,却可以返回局部变量
- C语言—指向函数的指针、全局变量和局部变量 、结构体、枚举
- 返回局部变量和指针
- 返回指向局部变量的指针或引用
- 返回指向局部变量的指针或引用
- 返回指向局部变量的指针或引用的问题
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部指针变量
- Spark函数传递:闭包和单例模式
- 重载
- Python List Tuple Dict Set小结
- https 和 SSL
- CVPR 2016-11-22
- C/C++ 子函数返回局部变量、指针 和改变指针指向
- 数据结构(9)——树
- LeetCode Binary Search
- maven4—在Eclipse安装maven插件以及创建maven项目
- EXE内存加载的两种方式(支持win7)
- (4)CSS定位和浮动
- 单例模式
- js 敲回车触发事件
- 1032.挖掘机技术哪家强