这是因为在C语言中,字符串字面量(如"FishC")是一个字符数组,而不是一个指针。
当你使用
char *array = {"FishC", "Five", "Star", "Good", "WoW"};
时,编译器会发出警告,因为你试图将一个字符串字面量的数组赋值给一个字符指针。正确的做法是使用一个二维字符数组来存储多个字符串:
char array[][20] = {"FishC", "Five", "Star", "Good", "WoW"};
这样,`array`就成为一个由5个字符串组成的数组。
接下来,我们需要定义一个指向字符指针的指针`p`,它可以指向`array`中的任意一个字符串。我们可以这样定义:
这样,`p`就指向了`array`的首地址。
然后,在循环中,我们可以通过`*(*p + j)`来访问`array`中的每个字符。所以完整的代码如下所示:
#include <stdio.h>
int main()
{
char array[][20] = {"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 小助理,如未能正确解答您的问题,请继续追问。 |