关于指向指针的指针,求解——谭浩强教材解决办法
关于指向指针的指针,求解——谭浩强教材
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*是一个字符串的数据类型)
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]所指向的内存的一个字符,而不是字符串。
说的不太清楚,希望你能理解。