栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言关于指针作为函数参数的用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言关于指针作为函数参数的用法

先看一段代码:

void swap(int a, int b)
{
int buf;
buf=a;
a=b;
b=buf;

}
int main()
{

int i=1,j=2;

swap(i,j);
printf("i=%d,j=%d",i,j);
return 0;
}

这个段代码是用来交换 i,j的值,但实际上,并不能交换i,j的值。i还是1,j还是2;

因为实参和形参之间传递都是单向,只能由实参传向形参。被调函数调用完之后系统为其分配的内存单元都会被释放。所以虽然将 i 和 j 的值传给了 a 和 b,但是交换的仅仅是内存单元 a 和 b 中的数据,对 i 和 j 没有任何影响。

所以想要实现两个数据的交换,需要对内存单元直接操作。例如:

void swap(int* p,int* q)
{

int buf;
buf=*p;
*p=*q;
*q=buf;
}

int main()
{
int i=1,j=2;
swap(&i,&j);
printf("i=%d,j=%d",i,j);
return 0;
}

这就实现了两个参数的交换。

此时由实参向形参传递的不是变量i和j的数据,而是变量 i 和 j 的地址。拷贝地址就可以直接对地址所指向的内存单元进行操作,即此时被调函数就可以直接对变量 i 和 j 进行操作了。当函数调用完之后,释放的是 p 和 q,不是 i 和 j。p 和 q 中存放的是 i 和 j 的地址。所以 p 和 q 被释放之后并不会影响 i 和 j 中的值。

函数参数传指针和传数据的区别:

如果希望在另外一个函数中修改本函数中变量的值,那么在调用函数时只能传递该变量的地址。如果这个变量是普通变量,那么传递它的地址就可以直接操作该变量的内存空间。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号