打印

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

[复制链接]
771|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

使用特权

评论回复
5
comeon201208|  楼主 | 2016-9-25 18:15 | 只看该作者
可以看出,实参的地址为1080956420
采用值传递的时候,函数操作的地址是1080956448并不是实参本身,所以对它进行操作并不能改变实参的值
接下来是指针传递,也可发现操作地址是实参地址。。

使用特权

评论回复
6
comeon201208|  楼主 | 2016-9-25 18:16 | 只看该作者
指针传递的实质:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,
即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的
任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

使用特权

评论回复
7
angerbird| | 2016-9-25 18:36 | 只看该作者
comeon201208 发表于 2016-9-25 18:14
采用实例的来说明的
#include

这个实例比较形象的,容易理解的。

使用特权

评论回复
8
smilingangel| | 2016-9-25 20:50 | 只看该作者
comeon201208 发表于 2016-9-25 18:16
指针传递的实质:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的 ...

指针传递参数的本质就是传递一个地址值的,通过指向的地址来访问里面的数据的。

使用特权

评论回复
9
309030106| | 2016-9-27 21:12 | 只看该作者
指针作为参数传递的仅仅只是指针的值,而不是指针的地址,或者说只是指针的一份拷贝

使用特权

评论回复
10
zhangbo1985| | 2016-9-27 22:20 | 只看该作者
comeon201208 发表于 2016-9-25 18:14
采用实例的来说明的
#include

例程中取值符的应用要注意的

使用特权

评论回复
11
vibra2016| | 2016-9-27 22:41 | 只看该作者
引用传递的C语言开发中没有的?

使用特权

评论回复
12
htmlme| | 2016-9-28 22:04 | 只看该作者
c语言的指针确实用的不是很好。

使用特权

评论回复
13
htmlme| | 2016-9-28 22:05 | 只看该作者
平时不怎么使用指针,怕出问题的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

4146

帖子

9

粉丝