打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C语言指向指针的指针

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



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

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

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

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


如果有:

  1. p=name+2;
  2. printf(%o\n”,*p);
  3. printf(%s\n”,*p);
p=name+2;printf(“%o\n”,*p);printf(“%s\n”,*p);
则,第一个printf函数语句输出name[2]的值(它是一个地址),第二个printf函数语句以字符串形式(%s)输出字符串“Great Wall”。

【例10-36】使用指向指针的指针。
  1. main(){
  2. char *name[]={'Follow me','BASIC','Great Wall','FORTRAN','Computer desighn'};
  3. char **p;
  4. int i;
  5. for(i=0;i5;i++){
  6. p=name+i;
  7. printf('%s\n',*p);
  8. }
  9. }
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】一个指针数组的元素指向数据的简单例子。
  1. main(){
  2. static int a[5]={1,3,5,7,9};
  3. int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
  4. int **p,i;
  5. p=num;
  6. for(i=0;i5;i++){
  7. printf('%d\t',**p);
  8. p++;
  9. }
  10. }
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++;="">
说明:指针数组的元素只能存放地址。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言指针专题——如何理解指针
《C语言程序设计》11 内存管理写字字帖
看完还不会指针,锤自己!
字符串与指针
char argv, char argv[], char* argv, char argv[][], char * argv[], char** argv, char (*argv)[]
C语言中有关强制转换的相关问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服