首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于指向指针的指针,求解——谭浩强教材解决办法

2012-05-14 
关于指向指针的指针,求解——谭浩强教材main(){char *name[]{Follow me,BASIC,Great Wall,FORTRAN,

关于指向指针的指针,求解——谭浩强教材
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); 
  } 
}
本人看法:name不是name[]的首地址么,那么*p应该是name[]里的内容,即存放字符串的地址,而**p才是*name[]里的内容,即Follow me……

现实情况:而在这里的这个程序,只需*p就能输出Follow me……呢?不解,求解,谢谢!


[解决办法]
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer desighn"};

这句话可以这么理解:
1. 有一个数组name
2. 数组中的元素的数据类型是char*(把char*看成是一个整体,比如char* s1 = "abc",也就是说char*是一个字符串的数据类型)

C/C++ code
#include <stdio.h>typedef char* STR;    // STR代表字符串这样的数据类型int main(int argc, char** argv) {    char *name[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};    // 和下一句同义    STR name2[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};    int i;    char **p;     for(i = 0; i < 5; i++)     {        p = name + i;         printf("%s\n", *p);     }    STR* p2;   // 和char **p; 同义,相当于一个STR的指针。下面的代码和上面一段代码同义。    for(i = 0; i < 5; i++)     {        p2 = name2 + i;         printf("%s\n", *p2);    // p2是一个字符串的指针,那么*p2就是一个字符串,即*p2的数据类型是STR或者char*    }         return 0;}
[解决办法]
你还没有理解字符串就是一个地址,上面是定义一个字符指针数组,也就是说数组中的每个元素都是一个字符指针(字符串即是地址),name是name[0]地址,p也是name[0]地址,*p就是name[0],name[0]本身是一个字符指针,这个指针保存的是字符串的地址,所以打印的时候会打印出字符串,**p是name[0]所指向的内存的一个字符,而不是字符串。

说的不太清楚,希望你能理解。

热点排行