c语言 中值传递与指针传递的详解

[复制链接]
1288|12
 楼主| comeon201208 发表于 2016-9-25 18:13 | 显示全部楼层 |阅读模式

基本定义的——

值传递:

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递:

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。


 楼主| comeon201208 发表于 2016-9-25 18:13 | 显示全部楼层
c语言中没有引用传递的,这个是跟c++不同的地方的。
 楼主| comeon201208 发表于 2016-9-25 18:14 | 显示全部楼层
采用实例的来说明的
#include<stdio.h>

void change1(int);
void change2(int *);

int main()
{
    int n = 8;
    printf("实参地址 %d\n",&n);
    change1(n);
    printf("*****执行change1,结果:n = %d",n);
    change2(&n);
    printf("*****执行change2,结果:n = %d",n);


    return 0;
}

void change1(int n)
{
    printf("值传递 函数操作地址%d\n", &n);
    n++;
}


void change2(int * n)
{
    printf("指针传递 函数操作地址%p\n", n);
    int temp;
    /* 此处不可写为 *n = *n + 1;编译器会报错:错误: 双目运算符 * 操作数(‘int’和‘int *’)无效*/
    temp = *n;
    *n = temp + 1;
}
 楼主| comeon201208 发表于 2016-9-25 18:15 | 显示全部楼层
运行结果如下

点击(此处)折叠或打开
实参地址 -1080956420
值传递 函数操作地址-1080956448
*****执行change1,结果:n = 8
指针传递 函数操作地址0xbf91e9fc
*****执行change2,结果:n = 9
 楼主| comeon201208 发表于 2016-9-25 18:15 | 显示全部楼层
可以看出,实参的地址为1080956420
采用值传递的时候,函数操作的地址是1080956448并不是实参本身,所以对它进行操作并不能改变实参的值
接下来是指针传递,也可发现操作地址是实参地址。。
 楼主| comeon201208 发表于 2016-9-25 18:16 | 显示全部楼层
指针传递的实质:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,
即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的
任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
angerbird 发表于 2016-9-25 18:36 | 显示全部楼层
comeon201208 发表于 2016-9-25 18:14
采用实例的来说明的
#include

这个实例比较形象的,容易理解的。
smilingangel 发表于 2016-9-25 20:50 | 显示全部楼层
comeon201208 发表于 2016-9-25 18:16
指针传递的实质:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的 ...

指针传递参数的本质就是传递一个地址值的,通过指向的地址来访问里面的数据的。
309030106 发表于 2016-9-27 21:12 | 显示全部楼层
指针作为参数传递的仅仅只是指针的值,而不是指针的地址,或者说只是指针的一份拷贝
zhangbo1985 发表于 2016-9-27 22:20 | 显示全部楼层
comeon201208 发表于 2016-9-25 18:14
采用实例的来说明的
#include

例程中取值符的应用要注意的
vibra2016 发表于 2016-9-27 22:41 | 显示全部楼层
引用传递的C语言开发中没有的?
htmlme 发表于 2016-9-28 22:04 | 显示全部楼层
c语言的指针确实用的不是很好。
htmlme 发表于 2016-9-28 22:05 | 显示全部楼层
平时不怎么使用指针,怕出问题的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

4146

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部