winkyboy 发表于 2018-1-12 23:20:32

带你学c带你飞的课后作业S1E23的一道题,求解答


我看不太懂char *array = {"FishC", "Five", "Star", "Good", "WoW"};
                char *(*p) = &array;的意思,求讲解一下整段代码的索引



#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 + i) + j) != '\0'; j++)
                {
                        printf("%c ", *(*(*p + i) + j));
                }
                printf("\n");
      }

      return 0;
}

人造人 发表于 2018-1-12 23:20:33

C语言复杂声明解析
http://blog.chinaunix.net/uid-29208421-id-5183647.html

当你看懂这篇文章以后,你就再也不会问这类问题了,因为你真的已经理解了
这篇文章不难,花点时间看一看

winkyboy 发表于 2018-1-12 23:55:01

人造人 发表于 2018-1-12 23:33
C语言复杂声明解析
http://blog.chinaunix.net/uid-29208421-id-5183647.html



为啥这网址我打不开{:5_92:}

人造人 发表于 2018-1-13 00:04:04

winkyboy 发表于 2018-1-12 23:55
为啥这网址我打不开

我可以打开呀

hogen 发表于 2018-1-13 00:04:13

当i=0时 *p + i 是取出"FishC"的首地址,*(*p + i) + j 是指向"FishC"字符串中的F字母的首地址,也就是说i控制显示第几个字符串,j控制字符串一个一个的显示出来。*(*(*p + i) + j)) 指向地址中的数据就是 F(当i=0,j=0时)。以此类推。我是这么理解不知说清楚么.

hogen 发表于 2018-1-13 00:16:39

hogen 发表于 2018-1-13 00:04
当i=0时 *p + i 是取出"FishC"的首地址,*(*p + i) + j 是指向"FishC"字符串中的F字母的首地址,也就是说i ...

hogen 发表于 2018-1-13 00:25:08

或者把它理解为二维数组思路是一样的

winkyboy 发表于 2018-1-13 08:27:07

hogen 发表于 2018-1-13 00:25
或者把它理解为二维数组思路是一样的

为什么不是 char **p而是 char *(*p)呢

winkyboy 发表于 2018-1-13 08:28:05

人造人 发表于 2018-1-13 00:04
我可以打开呀

为什么不是 char **p而是 char *(*p)呢

winkyboy 发表于 2018-1-13 10:31:08

人造人 发表于 2018-1-12 23:33
C语言复杂声明解析
http://blog.chinaunix.net/uid-29208421-id-5183647.html



已解决

hogen 发表于 2018-1-14 19:32:04

本帖最后由 hogen 于 2018-1-14 19:34 编辑

winkyboy 发表于 2018-1-13 08:27
为什么不是 char **p而是 char *(*p)呢

(*p) 数组里存放的是具体的数据。*p 数组里存放的是地址。
页: [1]
查看完整版本: 带你学c带你飞的课后作业S1E23的一道题,求解答