鱼C论坛

 找回密码
 立即注册
查看: 2277|回复: 7

这个是什么?

[复制链接]
发表于 2018-8-1 14:43:42 | 显示全部楼层 |阅读模式

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

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

x
char *(*p)[5] = &array;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-1 14:48:34 | 显示全部楼层
array是一个数组吧。
那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针。
你把它指向了一个数组。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 15:33:32 | 显示全部楼层
无符号整形 发表于 2018-8-1 14:48
array是一个数组吧。
那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针。
你把它指 ...

这是全部代码
#include <stdio.h>
#include <string.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; j < 5; j++)
                {
                        if (i > strlen((*p)[j]) - 1)
                        {
                                break;
                        }
                        printf("%c ", (*p)[j][i]);
                }
                printf("\n");
        }

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

使用道具 举报

发表于 2018-8-1 15:35:07 | 显示全部楼层

那么那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针(包含指针的数组array的每一个元素(它们是指针))。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 15:41:48 | 显示全部楼层
无符号整形 发表于 2018-8-1 15:35
那么那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针(包含指针的数组array的每一 ...

为什么这样就不行呢
(*p)[5] = &array
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 15:48:26 | 显示全部楼层
向上的蜗牛 发表于 2018-8-1 15:41
为什么这样就不行呢
(*p)[5] = &array

因为array是一个指针,它指向一个数组,然而那个(*p)[5]却是指向一个包含5个数据(每一个数据不是指针)的数组。
然而*(*p)[5]是一个指向一个包含(5个内容)都是指向指针的数组。(注意这里是1个数组,5个内容!!)
是不是很绕口……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 21:46:29 | 显示全部楼层
本帖最后由 zqianglh 于 2018-8-3 23:31 编辑

char array[5] 字符数组
char *array[5] 指针数组
char (*p)[5] 指针p指向字符数组
char *(*p)[5] 指针p指向指针数组

或许你问的是这个 字符串怎么能保存在指针里!
C语言 语法允许指针数组(类似一个2级指针 指针-->char )直接用数组指针存储char
指针数组常用于指向不同长度的字符串,这样处理字符串方便些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 02:03:44 From FishC Mobile | 显示全部楼层
char *(*p)[5]=&array;
好像已经解决了,我来答一下我的理解~
这里涉及到符号的优先级~
本来*的优先级小于[]的,没括号应该是p[5]。
但因为*在括号内。所以,*p代表一个指针,然后再与[5]结合,变成(*p)[5],即一个指针,指向一个具有5个元素的整形数组~读p是数组的指针
最后再与*结合,取值~*(*p)[5]
而&array是取地址的值,
char *(*p)[5]=&array;指将array的值赋值给char *(*p)[5]~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 08:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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