鱼C论坛

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

关于指针的一些问题

[复制链接]
发表于 2019-1-25 10:35:14 | 显示全部楼层 |阅读模式

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

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

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;
}
还有就是这不是一维数组吗?然后 (*p)[i][j] 这个又是啥意思呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-25 12:16:46 | 显示全部楼层
首先,array本身是一个指针数组,
指针数组本身可以使用如array[i][j]的形式,表示第i个指针偏移j的那个字符;
而p是指向array的类型的指针(指针数组的指针),
对p解引用,他的类型就是指针数组了,所以(*p)[i][j]就是p所指向的那个指针数组的第i个指针偏移j的那个字符,
也就是arry的第i个指针偏移j的那个字符;

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

使用道具 举报

发表于 2019-1-25 13:06:54 | 显示全部楼层
C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768

文章有点长,耐心看完,你的C语言等级绝对可以上升到一个新的高度
也许你现在有好多还不理解,没关系,把它保存起来,一段时间后再去看,当你完全理解了这篇文章以后,C语言的语法部分你应该就不存在问题了

还有,学C语言至少也应该学两遍,第一遍是会用C语言,不去深入理解C语言的细节,不去理解C语言的内部实现,仅仅做到会用C语言
像一维数组,二维数组,学第一遍应该会用就行了,会在数组中存放数据,会使用数组中的数据就可以了

在学第二遍时请先停一停,先去拿到汇编语言
第二遍学C语言一定要带上汇编语言,这时就可以深入探索C语言了,这时你可以看到if,while,for这些关键字的内部实现,也就是说这些关键字做了什么,你那时一清二楚
你可以用汇编语言看C语言的数组是怎样实现的,数组内部的工作原理

你现在不应该纠结C语言的细节,应该做的会用就行了,因为你还需要再学一遍,带上汇编语言再学一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-1-26 09:12:25 | 显示全部楼层
你可以把(*p)[i][j]暂时假作为array[i][l],(*p)[1][1]和array[1][1]是同一地址,内存字符为字符串 "Five"的'i'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-5 08:47:50 | 显示全部楼层
人造人 发表于 2019-1-25 13:06
C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768

文章不错,感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 08:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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