第九章 指针
第三节 变量的指针和指向变量的指针变量-2
1. 指针变量作为函数参数
-
函数的参数可以是指针类型,作用是将一个变量的地址传递到一个函数中去
-
c语言中,实参变量个形参变量之间数据传递是单向的值传递,指针变量作为函数参数也要遵循这个原则
-
例子1
#include <iostream>
void swap(int *pdest1, int *pdest2) {//两个指针变量作为形参
//pdest1指向p1, pdest2指向p2
//调用swap函数不能改变实参指针变量的值,p1还是指向a,p2还是指向b,
//但是可以改变实参指针变量p1,p2指向的变量,也就是a,b的值
int temp;
temp = *pdest1;//temp = a;
*pdest1 = *pdest2;//a = b;
*pdest2 = temp;// b = a;
//指针调换没有达到目的,只是修改指向的变量,变量a和变量b并没有改变
//退出这个函数后,这三个变量销毁,也就是说swap函数没有意义
// 调用swap没有改变p1始终指向变量a,p2始终指向b
// int *ptemp;
// ptemp = pdest1;//ptemp指向a
// pdest1 = pdest2;//pdest1指向b
// pdest2 = ptemp;//pdest2指向a
}
int main() {
int a = 5, b = 6;
int *p1, *p2;
p1 = &a;
p2 = &b;
printf("a = %d, b= %d\n", a, b);
if (a < b) {
swap(p1, p2);//两个指针变量作为实参
}
printf("a = %d, b= %d\n", a, b);
return 0;
}
- 例子2
#include <iostream>
int main() {
int *p;//定义整型指针
//*p代表指针变量p所指向的变量,但p到底指向谁呢,并不确定
//所以*p可能会造成某个内存被无意修改了,从而使系统崩溃
// *p = 5;
// 正确用法,p指向了一段有效的内存,所以可以对它指向的内存进行赋值
int a;
p = &a;
*p = 5;
printf("a = %d\n", a);
return 0;
}