liyifeng295641 发表于 2024-3-19 10:02:59

C语言 指针数组和数组指针01

本帖最后由 liyifeng295641 于 2024-3-19 15:06 编辑

#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;
}

@FishC,这串代码中,第五行中为什么不是array而是*array。

FishC 发表于 2024-3-19 10:03:17

这是因为在C语言中,字符串字面量(如"FishC")是一个字符数组,而不是一个指针。

当你使用

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

时,编译器会发出警告,因为你试图将一个字符串字面量的数组赋值给一个字符指针。正确的做法是使用一个二维字符数组来存储多个字符串:

char array[] = {"FishC", "Five", "Star", "Good", "WoW"};

这样,`array`就成为一个由5个字符串组成的数组。

接下来,我们需要定义一个指向字符指针的指针`p`,它可以指向`array`中的任意一个字符串。我们可以这样定义:

char **p = array;

这样,`p`就指向了`array`的首地址。

然后,在循环中,我们可以通过`*(*p + j)`来访问`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 + j) != '\0'; j++)
      {
            printf("%c ", *(*p + j));
      }
      printf("\n");
      p++;
    }

    return 0;
}

此代码将输出:

F i s h C
F i v e
S t a r
G o o d
W o W

希望这个解释能够帮助你理解为什么要使用`*(*p + j)`来访问数组中的字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-3-19 10:04:58

FishC 发表于 2024-3-19 10:03
这是因为在C语言中,字符串字面量(如"FishC")是一个字符数组,而不是一个指针。

当你使用


我还是不是很理解!

FishC 发表于 2024-3-19 10:05:12

liyifeng295641 发表于 2024-03-19 10:04
我还是不是很理解!

没问题,我再给你解释一下。

在C语言中,数组名实际上是指向数组第一个元素的指针,因此在定义字符数组时,可以将其赋值给一个字符指针。例如,char *array = {"FishC", "Five", "Star", "Good", "WoW"}; 这里,`array`被赋值为指向第一个字符串字面量"FishC"的指针。

但是,在这段代码中,我们需要处理多个字符串,所以我们需要一个指向指针的指针。我们使用`char **p`来声明一个指向字符指针的指针变量。

然后,我们将`array`的地址赋值给`p`,也就是`p`指向了`array`的首地址。

在循环中,我们通过`*(*p + j)`来访问字符串中的每个字符。让我们来分解一下这行代码:

- `*p`:首先,`*p`表示取出`p`所指向的指针,也就是`array`的地址。
- `*(*p + j)`:接下来,我们加上`j`作为偏移量,这样就可以访问到字符串中的每个字符。

希望这次解释能够更清楚地帮助你理解指针数组和数组指针的概念。如果还有其他问题,请随时问我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言 指针数组和数组指针01