初学C语言中(值)传递和(址)传递

来源:互联网 发布:阿里云oss存储图片 编辑:程序博客网 时间:2024/05/22 06:58

很多朋友在学习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的值在调用函数内部被交换啦!


 */

 

原创粉丝点击