C语言,关于指针传递的问题(初学者)

1.首先指针的传递是双向的,它不同于单纯的函数(没有指针变量作为函数参数)。单纯的函数只能由实参传递给形参。

2.C语言中的实参变量形参变量之间的数据传递是单向的“值传递”,用指针变量作函数参数同样遵循这一规则。

就上述2点,我会分别举出例子。

1.写一个将2个变量值互换的函数。

void swap(int x,int y)
{
  int temp;
  temp=x;
  x=y;
  y=temp;
}

图1 

如果在main函数中调用swap函数:swap(a,b)   (假设a=2,b=3)

a,b是实参,x,y是形参。a->x,b->y(实参传递给形参)。此时x=2,y=3,然后经过swap函数,y=2,x=3。但是它不会返回给实参,也就是说a,b的值不变。那么你写这个函数就无实际意义。

所以我们就要用指针

2.怎么改?

下面是改正的函数

void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}

图2 

为了解

释上面的第2点“值传递”,再改一下。

void swap(int *x,int *y)
{
  int *temp;
  temp=x;
  x=y;
  y=temp;
}

图3 

这样改是不行的,因为它不是“值传递”,temp,x,y它们是指针变量,里面存放的是地址。

而*x,*y是指向变量的指针变量,你可以把它理解为普通的变量。像int a,int b中的a,b一样。可以存放数据(一个值),所以它们可以值传递”。

可以看到,图2与图3中的temp有所区别,图2中的temp是普通的变量,可以存放一个值,图3中的temp是一个指针变量,用来存放地址。

希望你们能理解! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值