定义指针变量的一般形式为:
类型 * 指针变量名;
如:int *pointer_1, *pointer_2;
int是为指针变量指定的“基类型”
基类型指定指针变量可指向的变量类型
如pointer_1可以指向整型变量,但不能指向浮点型变量
•下面都是合法的定义和初始化:
float *pointer_3;
char *pointer_4;
int a,b;
int *pointer_1=&a,*pointer_2=&b;
2.在引用指针变量时,可能有三种情况:
(1)给指针变量赋值。如:p=&a;
(2)引用指针变量指向的变量。如有
p=&a; *p=1; //*p相当于a
则执行printf(“%d”,*p); 将输出1
(3)引用指针变量的值。如:
printf(“%o”,p); //以八进制输出a的地址
3.要熟练掌握两个有关的运算符:
(1) & 取地址运算符。
&a是变量a的地址
(2) * 指针运算符(“间接访问”运算符)
如果:
int a,*p;
p=&a;
则: p指向变量a,*p就代表a。
*p=1; (把1赋给a)
例8.2 输入a和b两个整数,按先大后小的顺序输出a和b。
解题思路:用指针方法来处理这个问题。不交换整型变量的值,而是交换两个指针变量的值。
#include <stdio.h>
int main()
{ int *p1,*p2,*p,a,b;
printf(“integer numbers:");
scanf(“%d,%d”,&a,&b);
p1=&a; p2=&b;
if(a<b)
{ p=p1; p1=p2; p2=p; }
printf(“a=%d,b=%d\n”,a,b);
printf(“%d,%d\n”,*p1,*p2);
return 0;
}
注意:
(1)a和b的值并未交换,它们仍保持原值
(2)但p1和p2的值改变了。p1的值原为&a,后来变成&b,p2原值为&b,后来变成&a
(3)这样在输出*p1和*p2时,实际上是输出变量b和a的值,所以先输出9,然后输出5

