设为首页 加入收藏

TOP

C语言地址传递与值传递
2014-11-24 11:30:40 来源: 作者: 【 】 浏览:0
Tags:语言 地址 传递

1、在C语言中,所有非数组形式的数据实参都是以值传递的形式调用,在值传递的过程中,被调用函数的形式参数被视为该函数的局部变量,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。所以被调用函数不能修改作为实参的实际变量的值,而只能修改传递给他的那份备份。


2、而在地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址,被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。


3、同时,还有一个问题值得大家注意:无法向函数传递一个数组


可以验证一下:


如果数组真的传递到函数内部,那么i的值应该是10,可惜,i的值为4,的确没有传递过去。


C语言中,当一维数组作为函数的参数时,编译器总是把它解析成一个指向其首元素地址的指针。


针对上面的值传递与地址传递,下面用代码说明问题:


验证结果如下:


please input two integer
1
2
x = 2, y = 1
a = 1, b = 2
a = 2, b = 1


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ARM Linux内核启动要求 下一篇交叉编译OpenCV2.31与移植至ARM9

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)