社区
C++ 语言
帖子详情
把局部变量地址作为参数传递是否有风险!
心留
2017-08-06 02:42:07
把局部变量地址作为参数传递是否有风险
举例
long fun(long * lp)
{
( * lp)+=5;
return(0);
}
long main()
{
long num=0;
fun(&num);
return(num);
}
num 位局部变量,把他的地址作为参数调用另外一个函数进行处理,
目的是得到num的处理后的结果。
这样是否会因为num是局部变量二存在风险?
...全文
1245
3
打赏
收藏
把局部变量地址作为参数传递是否有风险!
把局部变量地址作为参数传递是否有风险 举例 long fun(long * lp) { ( * lp)+=5; return(0); } long main() { long num=0; fun(&num); return(num); } num 位局部变量,把他的地址作为参数调用另外一个函数进行处理, 目的是得到num的处理后的结果。 这样是否会因为num是局部变量二存在风险?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jena_wy
2017-08-06
打赏
举报
回复
函数修改值就是这样传的!
srhouyu
2017-08-06
打赏
举报
回复
不存在风险。Windows API大把这样的操作。把局部变量的地址作为返回值返回才会危险。
真相重于对错
2017-08-06
打赏
举报
回复
把地址作为参数,返回后地址不变, 把值作为参数,返回后值不变
使用pthread_create创建线程时,避免将
局部变量
的
地址
作为线程函数的
参数传递
创建线程时,避免将临时变量的
地址
作为线程函数的
参数传递
全局变量与
局部变量
在函数传参时的应用
局部变量
在函数结束之后会进行退栈,即该变量的内存空间被操作系统进行回收,该内存空间便不再属于本程序。 如: void fun1(int *var){ printf("%d",*var); } void fun2(){ int a = 10; fun1(&a); } fun2函数中的变量a属于
局部变量
,将a的
地址
值传入fun1函数,这样,在函数fun2结束之后,变量a的内存空间即&
局部变量
一定线程安全吗
局部变量
, 如果是基本类型或是包装类型, 依然不能通过多线程改变其值, 如果是对象, 则其属性值是线程不安全的 (对象引用是
局部变量
, 在栈内存, 但是对象本身还是处于堆内存) 这样理解还是有偏差, 如果是基础类型, 如int: 如果是全局变量, 那么各线程可以直接操作, 其一定是线程不安全的 如果是
局部变量
, 那么只能将该变量作为形参传入线程中, 这时int值是不能被改变的, 不管线程安...
Kotlin 和 Java 关于
局部变量
的区别
众所周知,在 Java 方法内将
局部变量
作为
参数传递
到方法后,如果该参数是基本数据类型,那内部的赋值修改不会同步到外部,如果是引用数据类型,对于对象的赋值也是不会同步到外部的,但是对于对象的属性修改是会同步的,这是因为 Java 是值传递,修改的是副本,但是副本指向的属性
地址
是相同的。 Java 基本数据类型的
局部变量
作为
参数传递
到方法 public class Test { public...
返回局部指针变量
返回值为数值时,返回
局部变量
可以,而返回值为引用或指针时,则存在
风险
。
局部变量
是存在于栈中的,函数被调用时先在栈中为变量申请空间,调用完成释放变量空间。函数在返回参数的时候是这样的,先把要返回的数放在寄存器eax中,然后回到主函数中取出eax中的数值放在变量里,所以这样是不涉及函数中变量
地址
的。 如果要返回引用,也就是变量
地址
,那么它会把这个变量的
地址
放在eax中,(注意这个
地址
是位
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章