|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- int main()
- {
- char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};
- char *(*p)[5] = &array;
- int i, j;
- for (i = 0; i < 5; i++)
- {
- for (j = 0; (*p)[i][j] != '\0'; j++)
- {
- printf("%c ", (*p)[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
复制代码
这道题看了好久,实在不懂上面一个指针数组里的字母是怎样输出出来的。
求解:
1,*array[5]内的是不是五个指针顺序存储;
2,*(*p)[5]是什么,这种在数组指针的前面加*取值符是怎样的套用形式;
3,*array[5]内的五个字符串是怎样存储到*(*p)[5]中的;
4,它们为什么可以以*(p)[i][j]的形式输出。
1,数组都是线性存储的,所以是顺序存储
2,(*p)[5] 是一个数组指针,指向的是一个数组(普通数组);前面加*说明又是一个指针,指向数组指针的指针;这样就可以用它来指向指针数组。
如:
(*p)[5] 用来指向 array[5] = {"FishC", "Five", "Star", "Good", "WoW"}
*(*p)[5] 用来指向 *array[5] = {"FishC", "Five", "Star", "Good", "WoW"}
3,*array[5]内的五个字符串 不是 存储到*(*p)[5]中的
2已经说得很明白了,是用*(*p)[5] 指向了*array[5]
4,因为数组和指针,指针和数组有着密不可分的关系,在很多情况下可以互用;同样也可以用指针的形式索引数组中的数据。总的来讲就是C的语法允许这样操作
|
|