C语言基础(二) 互动版

指针变量的运算


  指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算部分算术运算关系运算。指针运算符有两种:取地址运算符(&),取内容运算符(*)。

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);
}