指针作为函数参数

临近毕业,还有找工作的事情,繁忙之际还是坚持看一下C语言的知识,重点的地方或者不清楚的地方还是要记录一下。
本章以指针作为函数传参来说一下学习心得,大部分内容源自C语言程序设计课本。

首先从C语言中函数参数的传递方向说起,大家都知道,C语言中函数参数的传递方向是单向的,只能由主调函数的实参传递到被调函数的形参,而形参的值不能传递给实参。但是依据传送的内容可以将函数参数分为值型参数和指针型参数。通常来说,值型参数用来传值,而指针型参数用来传地址。可以看出,指针型参变量得到的是主调函数中某个变量的地址,因此可以通过间接存取运算,操作主调函数中的变量,从而将指针型形参的指向域扩大到主调函数,达到与主调函数双向交换数据的目的。这样,指针形参数的作用完全可以替代全局变量,而且可以弥补全局变量的不足之处。

下面举三个例子来说明,让大家更清楚的理解指针型变量的存在意义。

例1

void swap(int x, int y);

void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(x,y);
printf(“1:x=%d y=%d\n”, x, y);
}

void swap(int x,int y)
{
int temp;
printf(“子函数中交换前:x=%d,y=%d\n”, x, y);
temp = x; x = y; y = temp;
printf(“子函数中交换后:x=%d,y=%d\n”, x, y);
}
结果如图:
这里写图片描述

例2

void swap(int *x, int *y);

void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(&x,&y);
printf(“2:x=%d y=%d\n”, x, y);
}

void swap(int *x,int *y)
{
int temp;
printf(“子函数中交换前:*x=%d,*y=%d\n”, *x, *y);
temp = *x; *x = *y; *y = temp;
printf(“子函数中交换后:*x=%d,*y=%d\n”, *x, *y);
}
运行结果:
这里写图片描述

例3

void swap(int *x, int *y);

void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(&x,&y);
printf(“2:x=%d y=%d\n”, x, y);
}

void swap(int *x,int *y)
{
int *temp;
printf(“子函数中交换前:*x=%d,*y=%d\n”, *x, *y);
temp = x; x = y; y = temp;
printf(“子函数中交换后:*x=%d,*y=%d\n”, *x, *y);
}
这里写图片描述

从这里可以得到如下结论:
1.例1说明函数间参数只能单向传递。
2.例2说明当指针变量作为函数传递参数时,形参和实参形参和实参同时指向同一内存地址。
3.虽然交换了形参x和y的指向,但是指针型参数也必须遵循单向传递规则,x和y的值不会回传给实参。

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值