在引用指针变量时有3种情况:
(1)给指针变量赋值。如:
p=&a;//把a的地址赋给指针变量p
指针变量p的值是变量a的地址,p指向a。
(2)引用指针变量指向的变量。
如果执行p=&a;
,即指针变量p指向了整型变量a,则
printf("%d",*p);
其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。
如果有以下赋值语句:
*p=1;
表示将整数1赋给p当前所指向的变量,如果p指向变量a,则相当于把1赋给a,即“a=1;”。
(3)引用指针变量的值。如:
printf("%o",p);
作用是以八进制数形式输出指针变量p的值,如果p指向a,就是输出了a的地址,即&a.
注意:
要熟练掌握“&”和“*”这两个运算符。
(1)&
取地址运算符。&a是变量a的地址。
(2)*
指针运算符(或称“间接访问”运算符),*p代表指针变量p指向的对象。
下面是一个指针变量应用的例子
【例题】
输入a和b两个整数,按先大后小的顺序输出a和b
【代码】
int main()
{
int a, b;
printf("从键盘输入整数a和b:\n");
scanf("%d%d", &a, &b);
int* p1, * p2;//p1, p2的类型是int*
p1 = &a;
p2 = &b;
int *p;
if (a < b) //如果a<b
{
p = p1;
p1 = p2;
p2 = p;
} //使p1与p2的值交换
printf("Max=%d Min=%d\n", *p1, *p2); //输出p1和p2所指向的变量的值
printf("a=%d b=%d\n", a, b); //输出a,b的值,a,b的值没有交换
return 0;
}
【运行结果】
【程序分析】
输入a=5,b=9,由于a<b,将p1和p2交换。
交换前的情况:
交换后的情况:
注意:a和b的值并没有交换,它们仍然保持原值,但p1和p2的值该变了。p1的原值为&a,后来变成&b,p2的原值为&b,后来变成&a。这样在输出p1和p2时,实际上是输出变量b和a的值。