搞搞编程Kyle 发表于 2018-12-19 16:08:22

小甲鱼第23课数组指针的问题

本帖最后由 搞搞编程Kyle 于 2018-12-19 16:12 编辑

01.#include <stdio.h>

02.

03.int main()

04.{

05.      char *array = {"FishC", "Five", "Star", "Good", "WoW"};

06.      char *(*p) = &array;                   //这里为什么不可以定义成 char (*p) = &array

07.      int i, j;

08.

09.      for (i = 0; i < 5; i++)

10.      {

11.                for (j = 0; (*p) != '\0'; j++)

12.                {

13.                        printf("%c ", (*p));// array数组中字符串不是以组的形式存在的吗 为什么可以逐个输出了??

14.                }

15.                printf("\n");

16.      }

17.

18.      return 0;

19.}


问题有两个,标在上面的代码里了,求各位大神赐教。

啊涂涂 发表于 2018-12-20 11:42:32

第一个问题:因为数组指针指向的数组里面的元素为字符指针元素,所以说要char后面加上*,同理如果是

字符元素的话就不用加*了。

刘邦 发表于 2018-12-20 13:26:27

首先06行的问题,因为前面的array你定义的是一个指针类型,13行问题,前边的程序相当于把array这个一维字符串数组,改变为p[][]的二维数组,因为数组在内存空间是线性存储的。

啊涂涂 发表于 2018-12-20 14:58:58

第二个问题:字符串就是一串字符排列在一起嘛,一个挨着一个的,所以也可以一个一个的输出。就像咱们

平时输出字符串的时候其实也是一个一个的,给一个首地址,按照%s的格式输出,计算机找到这地址之后

把里面的值都输出出来,遇到\0就停止输出了

ba21 发表于 2018-12-20 18:44:51

1:
要看*(*p)这里首先得看*array;因为array 是一个指针数组,所以(*p)必须也得是一个指向数组指针的指针。一句话就是你加*,我也加*。要不就都不加
   array又必须得加* ,为什么,原因很简单,因为数组里面存放的是字符串,而C没有字符串的概念。所以就用指针数组来存入所谓“字符串”的第1个字符的地址。

看不加*的例子。字符:
int main()
{
        char a={'A','B','C','D', 'E'}; // 注意 这里是字符
        char (*p3) = &a;
        int i=0;

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

        return 0;
}

2:
char *array = {"FishC",
                            "Five",
                            "Star",
                            "Good",
                            "WoW"};

正如前面所说,这是一个指针数组,每个字符串都是一个地址,i索引到地址,j则索引到里面的每个字符(道理跟2维数组一样)
页: [1]
查看完整版本: 小甲鱼第23课数组指针的问题