Anonymous 发表于 2021-9-30 10:20:54

s1e23课后作业求助

#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;
}
为什么是 *(*p),难道是因为array是一个类似于二级指针的东西,所以也得放到二级指针来存放吗?








村里小黑 发表于 2021-9-30 11:07:54

你可以试着用二维数组的思维去理解

心驰神往 发表于 2021-9-30 11:14:38

当时学到指针就放弃了

wyz20010429 发表于 2021-9-30 12:32:43

你看哈,首先array是一个数组,存放指针,所以是一个指针数组,我们要用定义一个指针指向这个指针数组,那要用什么类型的指针呢?我们举个例子,比如int a=5, 那么我们要定义一个指向int型的指针,也就是int(*p),而本体array的类型是char*,所以能我们定义的就应该是指向char*的指针,所以应该是这样定义char*(*p)=&array滴

wyz20010429 发表于 2021-9-30 12:41:58

本帖最后由 wyz20010429 于 2021-9-30 12:47 编辑

不用非要想它是什么二级指针,我们只需知道他是个指针,指向什么类型,事实上,抛开这题,我们一般看到一个指针要想到四个角度指针本身类型,指针所指向类型,指针的值(跨度),指针自身所占内存空间,希望对你有所帮助{:10_264:}

sunyt 发表于 2021-9-30 13:13:20

心驰神往 发表于 2021-9-30 11:14
当时学到指针就放弃了

我也是,转去学python了,C语言往后遭不住啊,太难顶了

番杰 发表于 2021-9-30 13:16:57

咱们一步一步的来看:
(1)char array是一个数组,里面存的是char类型的数据。

(2)char *array是一个指针数组,说白了,也还是个数组,只不过这次数组中存放的是char类型的指针。
例如:此时array的取出值是“FishC”这个字符串的首地址,
而*array则是对该地址进行解引用,取出该地址中存储的值,即 ‘F’。

(3)char*(*p)对照着(2)来看,p就是一个指向指针数组的指针,
既然p是一个指针,那么它存储的必然是一个地址。只不过这个地址需要是char*类型的地址(即指针数组的地址)
所以就有了char *(*p) = &array;
这条语句相当于:
char *(*p);//定义一个指向指针数组的指针p
p = &array;// 把array的地址赋值给p。

所以此时p指向的array这个指针数组的首地址。

guiding 发表于 2021-9-30 14:08:45

番杰 发表于 2021-9-30 13:16
咱们一步一步的来看:
(1)char array是一个数组,里面存的是char类型的数据。



如果直接用char (*p) = &array;呢 p此时也是指向指针数组的指针

番杰 发表于 2021-9-30 14:20:01

guiding 发表于 2021-9-30 14:08
如果直接用char (*p) = &array;呢 p此时也是指向指针数组的指针

char (*p)
这个不是指向指针数组的指针;
这是数组指针,是一个指向数组的指针。

char (*p) 和char *(*p)是不一样的。

顶级太阳 发表于 2022-9-3 14:48:47

番杰 发表于 2021-9-30 13:16
咱们一步一步的来看:
(1)char array是一个数组,里面存的是char类型的数据。



指针和数组的管线太绕了,卡在这里已经一个月了。所有的业余时间都搭进去,受不了了,到求助里看看各位高手的解答。慢慢的,发现各种解答也看不明白了。
现在初步把指针理解为比对应的数组高一个维度,也就是数组是一个线,对应的指针算是增加了一个变化,一次取出是数组的地址,外扩一次取出才是里面的数值。
页: [1]
查看完整版本: s1e23课后作业求助