关于C语言指针数组和数组指针的一道题

题目描述

要求就是要填充空白部分的代码,其中---是需要填写的部分,共有三处。

题目来源

在看鱼C工作室的课程的时候遇到的一道课后题。

相关代码

#include<stido.h>

int main()
{
    char *array[5] = {"FishC", "Five", "Star", "Good", "Wow"};
    char --- = &array;
    int i, j;
    
    for(i = 0; i<5; i++)
    {
        for(j = 0; --- != '\0'; j++)
        {
            printf("%c", ---);
        }
    printf("\n");
    }
    
    return 0;

}

预期结果

clipboard.png

答案是

#include <stdio.h>

int main()
{
        char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};
        char *(*p)[5] = &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)[5]是什么意思呢,感觉只要理解了这个,后面两个空就好填了。

阅读 2k
3 个回答

变量 p 是一个指针,指向地址的类型是 char * [5],也就是“长度”为 5 的数组,数组里的元素是 char *

(p)[5] 申请一个 char 类的指针,p 为地址[5]表示 长度为5

不知道你是否知道数组指针
int arr[4]={4,2,3,6}
int(*p)[4]=&arr//存放int类型的数组的地址,包含元素有四个,同理

char *array[5] = {"FishC", "Five", "Star", "Good", "Wow"};//char *array[5] 是一个指针数组,虽然里面是英文,但它存放的是首地址。然后把上面的int改成char*,就可以了,
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进