这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 14.指向指针的指针

共1条 1/1 1 跳转至

14.指向指针的指针

高工
2014-10-29 16:22:19     打赏

  如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。在前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“单级间址”。而如果通过指向指针的指针变量来访问变量则构成“二级间址”。

                                              


  从下图可以看到,name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。Name是一个数据,它的每一个元素都有相应的地址。数组名name代表该指针数组的首地址。


  name+1是mane[i]的地址。name+1就是指向指针型数据的指针(地址)。还可以设置一个指针变量p,使它指向指针数组元素。P就是指向指针型数据的指针变量。


  怎样定义一个指向指针型数据的指针变量呢?如下:

  char **p;


  p前面有两个*号,相当于*(*p)。显然*p是指针变量的定义形式,如果没有最前面的*,那就是定义了一个指向字符数据的指针变量。现在它前面又有一个*号,表示指针变量p是指向一个字符指针型变量的。*p就是p所指向的另一个指针变量。


  从下图可以看到,name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。name是一个数组,它的每一个元素都有相应的地址。数组名name代表该指针数组的首地址。name+1是mane[i]的地址。name+1就是指向指针型数据的指针(地址)。还可以设置一个指针变量p,使它指向指针数组元素。P就是指向指针型数据的指针变量。

                     

如果有:



p=name+2;
printf(“%o\n”,*p);
printf(“%s\n”,*p);

 

  则,第一个printf函数语句输出name[2]的值(它是一个地址),第二个printf函数语句以字符串形式(%s)输出字符串“Great Wall”。


  【例10-36】使用指向指针的指针。


main(){
    char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer desighn"};
    char **p;
    int i;
    for(i=0;i<5;i++){
        p=name+i;
        printf("%s\n",*p);
    }
}

 

  说明:p是指向指针的指针变量。


  【例10-37】一个指针数组的元素指向数据的简单例子。


main(){
    static int a[5]={1,3,5,7,9};
    int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
    int **p,i;
    p=num;
    for(i=0;i<5;i++){
        printf("%d\t",**p);
        p++;
    }
}

 

说明:指针数组的元素只能存放地址。





共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]