C语言指针变量实现 交换
不使用指针变量:
正确写法
t=a;//正确的
a=b;
b=t;
错误写法
#include<stdio.h>
int main()
{
void swap(int x,int y);
int *point_1,*point_2;
int a,b;
scanf("%d%d",&a,&b);
swap(a,b);
printf("%d %d",a,b);
return 0;
}
void swap(int x,int y)//错误的
{
int temp;
temp=x;
x=y;
y=temp;
}
不能企图通过改变指针形参的值而使指针实参的值改变,函数结束时,形参x,y已经释放,而main函数中的a与b 并未互换,不能采取把要改变值的变量作为参数的办法,可以使用指针变量作为函数参数,函数执行时将指针变量所指向的变量值发生变化
使用指针变量:
两个数由大到小输出
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int *point_1,*point_2;
int *temp;
int a,b;
scanf("%d%d",&a,&b);
point_1=&a;
point_2=&b;
if(a<b)
{
temp=point_1; //使指向a与b的指针变量(地址)交换,a与b的值并未改变
point_1=point_2;
point_2=temp;
}
printf("%d %d\n",a,b);
printf("%d %d",*point_1,*point_2); //取地址交换后指针变量的内容
return 0;
}
输入a 与 b 的值分别为 3 和 6
定义swap函数实现
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int *point_1,*point_2; //定义两个指针变量
int a,b;
scanf("%d%d",&a,&b);
point_1=&a; //使指针变量point_1指向a
point_2=&b; //使指针变量point_2指向b
if(a<b) swap(point_1,point_2);
printf("%d %d",*point_1,*point_2);
return 0;
}
void swap(int *p1,int *p2) //定义swap函数
{
int temp; //定义一个整型变量temp作为临时辅助变量实现a,b的交换
temp=*p1; //相当于 temp=a;
*p1=*p2; //相当于 a=b;
*p2=temp; //相当于 b=temp; 即指针变量中内容的交换
}
错误写法:
void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}
在这里插入代码片
C语言中实参变量与形参变量之间的数据传递是单向的“值传递”方式,不能通过执行调用函数来改变实参指针变量的值,只可以改变实参指针变量所指向变量的值,不能企图通过改变指针形参的值而使指针实参的值改变