正在卓尼小乱 发表于 2017-8-19 18:24:57

帮我看看这道数组指针题

#include <stdio.h>

int main()
{
      char *array = {"FishC", "Five", "Star", "Good", "WoW"};
      char *(*p) = &array;
      int i, j;

      for (i = 0; i < 5; i++)
      {
                for (j = 0; (*p) != '\0'; j++)
                {
                        printf("%c ", (*p));
                }
                printf("\n");
      }

      return 0;
}
这道题看了好久,实在不懂上面一个指针数组里的字母是怎样输出出来的。
求解:
1,*array内的是不是五个指针顺序存储;
2,*(*p)是什么,这种在数组指针的前面加*取值符是怎样的套用形式;
3,*array内的五个字符串是怎样存储到*(*p)中的;
4,它们为什么可以以*(p)的形式输出。

正在卓尼小乱 发表于 2017-8-19 18:27:25

{:10_266:}我的怎么被吃掉了。
ps:问题4,中应该是(*p)   

ba21 发表于 2017-8-19 19:12:15

1,数组都是线性存储的,所以是顺序存储
2,(*p) 是一个数组指针,指向的是一个数组(普通数组);前面加*说明又是一个指针,指向数组指针的指针;这样就可以用它来指向指针数组。
如:
   (*p) 用来指向 array = {"FishC", "Five", "Star", "Good", "WoW"}
*(*p) 用来指向 *array = {"FishC", "Five", "Star", "Good", "WoW"}

3,*array内的五个字符串 不是 存储到*(*p)中的
    2已经说得很明白了,是用*(*p) 指向了*array

4,因为数组和指针,指针和数组有着密不可分的关系,在很多情况下可以互用;同样也可以用指针的形式索引数组中的数据。总的来讲就是C的语法允许这样操作

正在卓尼小乱 发表于 2017-8-19 22:23:30

恩,看了你的回答我总结了下,还有几个小问题:
1,*(*p)是不是以5个字符指针指向了*array中的5个指针的首地址;
2,指针初始化完之后p是什么;
for (j = 0; (*p) != '\0'; j++)
3,上题这一部分代码中是怎样利用(*p)打印字符的。

{:10_266:} 数组指针,指针数组这些概念太容易让人混淆了。。。

正在卓尼小乱 发表于 2017-8-19 22:24:07

又丢了,这是bug吗?{:10_266:}
页: [1]
查看完整版本: 帮我看看这道数组指针题