指针学习日志之---(完美传递)

指针在函数中的应用

< 完美的传递>

函数调用时,数据传递是不可避免的:

函数是完成某项特定功能的程序块,函数操作的基础是数据,故函数调用也是为了操作这些数据,以完成相应的功能。

函数调用时传递的数据,就是所谓的函数参数。可分为

一:传递的是变量的数值(普通参数)
二:传递的是变量的地址(指针参数)<—> 传递的是指针变量的数值

在c中,函数传递总是单向的值传递------指针参数的传递解决了单向值传递问题


为啥说函数传递总是单向的值传递?eg 例3-1
#include <stdio.h>
typedef unsigned char u8;  //定义一个u8的无符号字符型
void Swapdata(u8 data_x,u8 data_y); //声明交换函数
int main(void)
{
	u8 x=2; 
	u8 y=3;//x,y为实参  
	printf("x=%d , y=%d \n",x,y);  //交换前
	Swapdata(x, y);  //调用交换函数
	printf("x=%d , y=%d \n",x,y);  //交换后
    return 0;
}

void Swapdata(u8 data_x,u8 data_y) //data_x,data_y为形参
{
	u8 temp;  //临时变量
	temp = data_x;  //暂存data_x的值
	data_x = data_y; 
	data_y = temp;
}
x=2 , y=3 
x=2 , y=3 

为什么值没有交换?? 我们稍微修改一下 eg 例3-2

#include <stdio.h>
typedef unsigned char u8;  //定义一个u8的无符号字符型
void Swapdata(u8 data_x,u8 data_y); //声明交换函数
int main(void)
{
	u8 x=2; 
	u8 y=3;//x,y为实参  
	//printf("x=%d , y=%d \n",x,y);  //交换前
	Swapdata(x, y);  //调用交换函数
	//printf("x=%d , y=%d \n",x,y);  //交换后
    return 0;
}

void Swapdata(u8 data_x,u8 data_y) //data_x,data_y为形参
{
	u8 temp;  //临时变量
	printf("x=%d , y=%d \n",data_x,data_y);  //交换前
	temp = data_x;  //暂存data_x的值
	data_x = data_y; 
	data_y = temp;
	printf("x=%d , y=%d \n",data_x,data_y);  //交换前
}
x=2 , y=3 
x=3 , y=2 

现在交换了? 看一下有什么区别,3-1 打印的是实参,3-2打印的是形参
也就是说 : 实参的值传递给了形参,但形参的值没有传递给实参 === 函数单向值得传递
通俗易懂就是 形参的值是实参copy过来的 所以形参值变化没有影响实参的值变化



狼来了------放羊孩子说到:如果把指针作为函数参数进行传递会怎样?eg 例3-3 (明知故问)

#include <stdio.h>
typedef unsigned char u8;  //定义一个u8的无符号字符型
void Swapdata(u8 *data_x,u8 *data_y); //声明交换函数
int main(void)
{
	u8 x=2; 
	u8 y=3;//x,y为实参
	u8 *p_x,*p_y;
	p_x = &x; //初始化指针变量  p_x指向变量x
	p_y = &y; //初始化指针变量  p_y指向变量y
    printf("x=%d , y=%d \n",x,y);  //交换前
	Swapdata(p_x, p_y);  //调用交换函数
	printf("x=%d , y=%d \n",x,y);  //交换后
    return 0;
}

void Swapdata(u8 *data_x,u8 *data_y) //data_x,data_y为形参
{
	u8 temp;  //临时变量
	temp = *data_x;  //暂存data_x的值
	*data_x = *data_y; 
	*data_y = temp;
}
x=2 , y=3 
x=3 , y=2 

**从执行结果可知道,x,y的值的确交换了 这是为什么呢??
前者传递变量的数值,后者传递变量的地址 函数Swapdata(u8 data_x,u8 data_y)操作的是变量地址
那么变量地址是不变的,但地址中存储的值交换 故而,(你在我家,我在你家)数值也就达到了交换的目的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值