指针

来源:互联网 发布:网络直播议论文 编辑:程序博客网 时间:2024/06/05 13:34

指针是一种新的数据类型,它的值代表存储单元的地址,它的类型代表指针所指存储单元占用多少个连续字节内存单元。

存放指针的变量称为指针变量。指针变量的格式是:

 《存储类型》   <类型> *<变量名>

存储类型任选;变量前的*指明说明的变量为指针变量;而类型则指出指针变量所指向的数据类型,即指针所指向的存储单元中存放的数据类型。

例如:int *p1,*p2,i,j;    //说明了两个整型指针变量p1,p2,两个整形变量i,j



指针的运算

指针的运算有:赋值、关系、算术和强制类型转换。

指针的赋值:将一个指针赋给一个指针变量称为指针的赋值。

例如:int  a=1,*p1,*p2;

           p1=&a;         //L1,将变量a的指针赋给p1;

           p2=p1;         //L2,将同类型的指针p1赋给p2;

&是地址运算符,因为指针表示的是存储单元的地址,所以L1语句表示的是将变量a的地址赋给p1,L2语句因为p1、p2都是指针,所以不需要用&运算符。

如果要访问指针变量所指向的变量时,要用一元运算符“ * ”。运算符*可取出指针指向地址中存储的数值。

例如:  int  *p1,*p2,i=100,j;

             p1=&i;

              p2=&j;

            *p2=*p1+200;    //将p1所指向的变量(即变量i)+200再赋给p2所指向的变量(即变量j)


指针的算术运算

指针的算术运算分为三种:一是指针变量的 ++或 - -,而是指针变量值加或减一个整数值,三是两个同类型指针的相减。

(1)指针变量执行++或- -操作时,其含义是是指针指向下一个或上一个变量,而指针变量的值实际加或减sizeof(指针变量类型)。

(2)指针变量加或减一个整数值,即:

 <指针变量>=<指针变量>+(-)n;

指针变量指向其后或其前第n个变量,指针变量的值实际是:

<指针变量>=<指针变量>+(-)zsizeof(<该指针变量的类型>)*n;


指针的关系运算

指针的关系运算主要用于数组方面。指针的关系运算依据指针值得大小来进行。通常只有同类型的指针比较才有意义,相等比较的含义是判断两个指针是否指向相同的变量,即两个指针是否相同;而不相等比较的含义是判断两个指针是否指向不同的变量;当指针与0比较时,表示指针的值是否为空。

例如

#define  <stdio.h>

int main(void)

{
    int a[5]={100,200,300,400,500},sum=0;
    int *p1,*p2;
    for(p2=&a[0];p2<=&a[4];p2++)        //A
      printf("%5d",*p2);
    printf("\n");
    p1=&a[0]+5;                                     //B
    p2=&a[0];                                         //C
    while(p2!=p1)                                  //  D
       sum+=*p2++;                                 //E
    printf("The sum of a is %d.\n",sum);
    return 0;
}

输出结果如下:

  100  200  300  400  500
The sum of a is 1500.

程序输出数组a的所有元素,并计算数组a的元素之和。A行循环执行完后,p2指向数组a最后元素的后面;B使指针p1指向数组a的最后元素的后面;C行使p2重新指向数组a的第0个元素;D行中的条件成立时,表示没有遍历数组a中的所有元素;E行中的*p2++,因运算符*和++优先级相同,按从右到左

的顺序计算,即先进行p2++的运算,即取出p2的值参加后续运算,然后使p2加1,因此*p2++等同于语句“ sum+=*p2;p2++;  ”。



0 0