ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

swap()交换函数【引用】

2022-07-09 20:33:59  阅读:127  来源: 互联网

标签:函数 temp int 引用 交换 swap printf 指针


C语言的变量,就是将系统分配的地址取个别名,所以变量名就是地址。

引用是一个变量的另一个名字,又称别名。
定义方式:
int a=10;
int &b=a;
在这里,意思就是给a变量起了一个新名字b,因此b不可再次被重新定义。
引用必须初始化,无空引用,并且引用不分等级。

函数的定义
类型 函数名(形参) { }


一、理解
1. 按值传递时,函数不会访问当前调用的实参,因此本体就不会交换,交换的只是通过函数形参复制过来的值。函数处理的值是它本地的拷贝,这些拷贝被存储在运行栈中,因此改变这些值不会影响实参的值。一旦函数结束了,函数的活动记录将从栈中弹出,这些局部值也就消失了。在按值传递的情况下,实参的内容没有被改变。这意味着程序员在函数调用时无需保存和恢复实参的值。
//值传递,*不改变a,b的值*
void swap(int a, int b)
{
int temp=0;
temp = a;
a = b;
b = temp;
}
1
2
3
4
5
6
7
8
2. 函数的形参设为指针,然后将指针上对应的数值进行交换,地址上的值就会改变。由于传递的是两个变量的内存地址(指针)使得我们可以直接操作对应的值。
void swap(int *a, int *b)
{
int temp=0;
temp = *a;
*a = *b;
*b = temp;
}
1
2
3
4
5
6
7
3. 将函数的参数设为指针的引用,只交换指针的数值,实质上的值没有交换。
什么叫做指针的引用,就是给传入函数的指针起个别名,实质上变了名字后还是指针。

void prswap(int *&a, int *&b)//换了个名字的指针,叫指针的引用
{
int *temp = a;
a = b;
b = temp;
}

int main()
{
int x = 100;
int y = 200;
int *n1 = &x;
int *n2 = &y;
prswap(n1,n2);
printf("n1:%d\nn2:%d",x,y);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4. 将函数的参数设为指针的引用,交换彼此保存的地址值,才能达到真正的数值交换。
void prswap(int *&x, int *&y) {//换了个名字的指针,叫指针的引用
int temp = *y;
*y = *x;
*x = temp;
}
int main()
{
int x = 100;
int y = 200;
int *n1 = &x;
int *n2 = &y;
prswap (n1,n2);
printf("n1:%d\nn2:%d",x,y);
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
二、代码
环境【Dev C++】
文件格式:.cpp
#include<stdio.h>

void swap(int *a, int *b)//改变指针上的数值,交换本体
{
int temp = *a;
*a = *b;
*b = temp;

}
void swap2(int *a, int *b)//交换指针的值,局部复制,不影响本体
{
int *temp = a;
a = b;
b = temp;
}

void swap3(int &a, int &b)//引用,交换本体
{
int temp = a;
a=b;
b = temp;
}


void prswap(int *&a, int *&b)//指针的引用,给传入的地址指针取个别名,其实还是指针。进入函数后局部复制,不交换本体。
{
int *temp = a;
a = b;
b = temp;
}
void prswap2(int *&x, int *&y) // 指针的引用,交换指针上的值,交换本体。
{
int temp = *y;
*y = *x;
*x = temp;
}

int main()
{
int x = 100;
int y = 200;

int *n1 = &x;
int *n2 = &y;
/*
* //改变指针上的数值,交换本体
*/
printf("基于指针的swap交换函数,方式一:\n");
printf("原来:\t\t\tx=%d\ty=%d\n",x,y);
swap(&x,&y);
printf("swap()处理后:\t\tx=%d\ty=%d\n\n",x,y);

/*
* //交换指针的值,局部复制,不影响本体
*/
x = 100;
y = 200;
printf("基于指针的swap交换函数,方式二:\n");
printf("原来:\t\t\tx=%d\ty=%d\n",x,y);
swap2(&x,&y);
printf("swap2()处理后:\t\tx=%d\ty=%d\n\n",x,y);

/*
* //引用,交换本体
*/
x = 100;
y = 200;
printf("基于引用的swap交换函数,方式一:\n");
printf("原来:\t\t\tx=%d\ty=%d\n",x,y);
swap3(x,y);
printf("swap3()处理后:\t\tx=%d\ty=%d\n\n",x,y);



/*
* 指针的引用,给传入的地址指针取个别名,其实还是指针。进入函数后局部复制,不交换本体。
*/
x = 100;
y = 200;
int *prx = &x;
int *pry = &y;
printf("基于指针引用的swap交换函数,方式一:\n");
printf("原来:\t\t\tx=%d\ty=%d\n",x,y);
prswap(prx,pry);
printf("prswap()处理后:\t\tx=%d\ty=%d\n\n",x,y);

/*
* // 指针的引用,交换指针上的值,交换本体。
*/
x = 100;
y = 200;
int *prxx = &x;
int *pryy = &y;
printf("基于指针引用的swap交换函数,方式二:\n");
printf("原来:\t\t\tx=%d\ty=%d\n",x,y);
prswap2(prxx,pryy);
printf("prswap2()处理后:\tx=%d\ty=%d\n\n",x,y);

return 0;
}
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AISc_O/article/details/109243948

搜索

复制

标签:函数,temp,int,引用,交换,swap,printf,指针
来源: https://www.cnblogs.com/stdxxd/p/16461790.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有