指针变量作为函数参数
函数的参数,可以是指针类型。作用是将一个变量的地址传送到一个函数中;
#include<stdio.h>
void swap(int *pdest1,int *pdest2) //两个指针变量作为函数形参
{ //此时,pdest1 指向了 a,pdest2 指向了 b
int temp;
temp=*pdest1; //*pdest1(就是pdest1所指向的变量),实际就是 a.所以等价于temp=a; temp=5;
*pdest1=*pdest2; //*pdest2(就是pdest2所指向的变量),实际就是 b.所以等价于temp=a;a=6;
*pdest2=temp; //b=5;
}
int main()
{
int a=5,b=6;
int *p1,*p2;
p1=&a; //p1指向了a
p2=&b; //p2指向了b
printf("a=%d,b=%d\n",a,b);
if(a<b)
{
swap(p1,p2); //两个指针变量作为实参
}
printf("a=%d,b=%d\n",a,b);
}
C语言中,实参变量和形参变量之间数据传递时
单向传递的值传递,指针变量作为函数参数也要
遵循这个原则:
调用函数 swap()
不能改变实参指针变量的值(值就是地址
),就是 p1还是指向了 a,p2还是指向了 b,
但是可以改变实参指针变量p1,p2
指向的变量,也就是在 swap()函数中,改变了 a,b的值。a,b就是实参变量p1,p2所指向的变量。
【简单来说就是:实参指针变量
保存的地址
不能变,实参指针变量
保存的
地址中的值
可以变】
注意这种
错误写法:
int *p; //定义了整型指针
*p = 5; //*p代表的是指针变量p所指向的变量,但是p 到底指向谁?是不确定的,所以*p可能会造成某个内存被无意修改了,从而使系统崩溃。
※但是可以这样写:
int *p; //定义了整型指针
int a;
p=&a; //指针变量指向了 a;
*p=5; //这样等价于 a=5,相当于是给a 赋值了。
#include<stdio.h>
int main()
{
int *p; //定义了整型指针
int a;
p=&a; //指针变量指向了 a;
*p=5; //这样等价于 a=5,相当于是给a 赋值了。
printf("a=%d\n",a);
}