鱼C论坛

 找回密码
 立即注册
查看: 939|回复: 4

[已解决]关于C语言数组指针问题

[复制链接]
发表于 2020-3-27 21:21:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

请问为什么这段代码中,在定义数组指针的时候,会多出一个*号。这个星号在这里是做什么用的?
最佳答案
2020-3-27 22:06:22
array是一个数组指针,有5个元素,每个元素指向一个数组,即后面的五个字符串;
array本身就是指针,所以指向array的就是指针的指针,所以就需要定义char *(*p)
而array又是一个二维数组,所以他的指针就需要定义成数组指针,这就有了char*(*p)[5]

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-27 21:31:09 | 显示全部楼层
百度一下 指针数组 和 数组指针
因为array数组每个元素本身是一个字符串,需要一个指针来寻址,所以array是一个全是指针的数组,所以array的地址需要加一层*
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 21:45:42 | 显示全部楼层
char* array[5] 
char* (*p)[5] 
你把定义书写成这样子,会不会更容易理解点
array[5]与 (*p)[5] 等价 一个指针指向一个5个成员的数组
但你发现,这个数组的类型竟然是char* 类型
这个是什么意思
就是一个数组里面的元素都是指针,这是什么情况呢?
最容易出现的就是 字符串数组咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 22:06:22 | 显示全部楼层    本楼为最佳答案   
array是一个数组指针,有5个元素,每个元素指向一个数组,即后面的五个字符串;
array本身就是指针,所以指向array的就是指针的指针,所以就需要定义char *(*p)
而array又是一个二维数组,所以他的指针就需要定义成数组指针,这就有了char*(*p)[5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-28 16:57:28 | 显示全部楼层
找到一个更容易理解的解释

int *(*p(int))[3];&#160;-- 杂从 p 开始,先与 () 结合, 说明 p 是一个函数, 然后进入 () 里面, 与 int 结合, 说明函数有一个整型变量参数, 然后再与外面的 * 结合, 说明函数返回的是一个指针, 然后到最外面一层, 先与[]结合, 说明返回的指针指向的是一个数组, 然后再与 * 结合, 说明数组里的元素是指针, 然后再与 int 结合, 说明指针指向的内容是整型数据。所以 p 是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表