指针变量的运算
指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算及关系运算。指针运算符有两种:取地址运算符(&),取内容运算符(*)。
main(){
int a=5,*p=&a;
printf ("%d",*p);
}
表示指针变量p取得了整型变量a的地址。printf("%d",*p)语句表示输出变量a的值。
指针变量的赋值运算有以下几种形式。
1) 指针变量初始化赋值,前面已作介绍。
2) 把一个变量的地址赋予指向相同数据类型的指针变量。例如:
int a,*pa;
pa=&a; /*把整型变量a的地址赋予整型指针变量pa*/
3) 把一个指针变量的值赋予指向相同类型变量的另一个指针变量。如:
int a,*pa=&a,*pb;
pb=pa; /*把a的地址赋予指针变量pb*/
由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值。
4) 把数组的首地址赋予指向数组的指针变量。例如:
int a[5],*pa;
pa=a; /* 数组名表示数组的首地址,故可赋予指向数组的指针变量pa */
5) 把字符串的首地址赋予指向字符类型的指针变量。例如:
char *pc;
pc="C Language";
6) 把函数的入口地址赋予指向函数的指针变量。例如:
int (*pf)();
pf=f; /*f为函数名*/
对于指向数组的指针变量,可以加上或减去一个整数n。
int a[5],*pa;
pa=a; /*pa指向数组a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值为&pa[2]*/
指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义的。只有指向同一数组的两个指针变量之间才能进行运算,否则运算毫无意义。【例】
main(){
int a=10,b=20,s,t,*pa,*pb; /*说明pa,pb为整型指针变量*/
pa=&a; /*给指针变量pa赋值,pa指向变量a*/
pb=&b; /*给指针变量pb赋值,pb指向变量b*/
s=*pa+*pb; /*求a+b之和,(*pa就是a,*pb就是b)*/
t=*pa**pb; /*本行是求a*b之积*/
printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);
printf("s=%d\nt=%d\n",s,t);
}