(一)怎样定义指针变量:
基类型 * 指针变量名
如:int *pointer_1,*pointer_2;
左端的int是定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
在定义指针变量时要注意:
(1)指针变量前面的“*”表示该变量的类型为指针变量。指针变量名是pointer_1和pointer_2,而不是*pointer_1和pointer_2.
对上述指针变量的定义可以这样理解:“int * pointer_1,*pointer_2;”定义了* pointer_1和*pointer_2是整型变量,如同“int a,b;”定义了a和b是整形变量一样。而*pointer_1和*pointer_2是pointer_1和pointer_2所指向的变量,pointer_1和pointer_2是指针变量。
(2)定义指针变量时必须指定“基类型”。
(3)赋给指针变量的是变量地址而不能是任意类型的数据,而且只能是与指针变量的基类型相同类型的变量的地址。
例如下面错误赋值:
float a;
int *pointer_1;
pointer_1=&a;
(4)指针变量中只能存放指针(地址),不要将一个整数赋给一个指针变量。如:
pointer_1=100;
(二)怎样引用指针变量:
(1)给指针变量赋值。如:
p=&a;
指针变量p的值是变量a的地址,p指向a。
(2)引用指针变量指向的变量。
如果以执行“p=&a;”,既指针变量p指向了整形变量a,则
printf("%d",*p);
以下赋值语句:
*p=1;
便是将整形1赋给p当前所指向的变量(如果p指向变量a,则相当于把1赋给a,既:(a=1;))。
(3)引用指针变量的值。如:
printf("%o",p);
作用是以八进制数形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,既&a。
例子:
question:输入a和b两个整数,按先大后小的顺序输出a和b。
编写程序:
#include<stdio.h>
void main()
{int *p1,*p2,*p,a,b;
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("max=%d,min=%d\n",*p1,*p2);/*并不是改变了a和b的值,而是改变了p1和 p2的指向*/
}
(三)指针变量作为函数参数: