读书人

关于指向指针的指针求解谭浩强教

发布时间: 2012-05-14 15:24:34 作者: rapoo

关于指向指针的指针,求解——谭浩强教材
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]所指向的内存的一个字符,而不是字符串。

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

读书人网 >C语言

热点推荐