很多朋友在学习C语言的时候,在遇见值传递和址传递的时候难免会有些不理解,
比如说要实现两个数进行值的交换,一般我们都写成
//下面是一个典型的例子
//用户需要运用函数实现两个数值的交换,一般都会这么写---->>
#include <stdio.h>
void main()
{
void trans(int a,int y); //函数的声明
int a,b;
printf("a = "); //和用户进行交互输入数据
scanf("%d",&a);
printf("b = ");
scanf("%d",&b);
trans(a,b); //调用trans函数
printf("a = %d/n",a);
printf("b = %d/n",b);
}
void trans(int x,int y) //定义trans函数,函数值为整型,有两个行参X和y
{
int temp; //声明一个变量,使其把行参值进行交换
temp = x;
x = y;
y = temp;
}
/*
我们输入一下值
a = 10 ,b = 20
本以为可以达到最后的结果 a = 20 , b = 10 ;
可是编译运行后结果并没有改变依然是a = 10 , b = 20
//下面是解决的办法----->> 此程序是用c++写的,基本和c语言一样
#include <iostream>
using namespace std; //命名空间的声明
int main()
{
void trans(int *p1,int *p2); //声明调用函数trans
int a,b; //声明两个变量
cout<<"a = ";
cin>>a;
cout<<"b = ";
cin>>b;
trans(&a,&b); //调用trans函数,并把a和b的地址传给行参,注意传的是地址
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
return 0;
}
void trans(int *p1,int *p2) //trans函数的定义
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
按照上面的写法我们就可以很好的解决用函数实现两个数值的交换,一般实参给行参传的是值,而我们御用啦指针
就可以把两个数的地址传给调用函数的两个行参,那么他们所指向的是就是实际的a和b那么在调用函数trans被系统
销毁的时候,也就使得a和b的值在调用函数内部被交换啦!
*/