鱼C论坛

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

[已解决]小甲鱼第23课数组指针的问题

[复制链接]
发表于 2018-12-19 16:08:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 搞搞编程Kyle 于 2018-12-19 16:12 编辑
01.#include <stdio.h>

02.

03.int main()

04.{

05.        char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};

06.        char *(*p)[5] = &array;                   //这里为什么不可以定义成 char (*p)[5] = &array

07.        int i, j;

08.

09.        for (i = 0; i < 5; i++)

10.        {

11.                for (j = 0; (*p)[i][j] != '\0'; j++)

12.                {

13.                        printf("%c ", (*p)[i][j]);  // array数组中字符串不是以组的形式存在的吗 为什么可以逐个输出了??

14.                }

15.                printf("\n");

16.        }

17.

18.        return 0;

19.}

问题有两个,标在上面的代码里了,求各位大神赐教。
最佳答案
2018-12-20 11:42:32
第一个问题:因为数组指针指向的数组里面的元素为字符指针元素,所以说要char后面加上*,同理如果是

字符元素的话就不用加*了。

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

使用道具 举报

发表于 2018-12-20 11:42:32 | 显示全部楼层    本楼为最佳答案   
第一个问题:因为数组指针指向的数组里面的元素为字符指针元素,所以说要char后面加上*,同理如果是

字符元素的话就不用加*了。

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

使用道具 举报

发表于 2018-12-20 13:26:27 | 显示全部楼层
首先06行的问题,因为前面的array你定义的是一个指针类型,13行问题,前边的程序相当于把array这个一维字符串数组,改变为p[][]的二维数组,因为数组在内存空间是线性存储的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-20 14:58:58 | 显示全部楼层
第二个问题:字符串就是一串字符排列在一起嘛,一个挨着一个的,所以也可以一个一个的输出。就像咱们

平时输出字符串的时候其实也是一个一个的,给一个首地址,按照%s的格式输出,计算机找到这地址之后

把里面的值都输出出来,遇到\0就停止输出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-20 18:44:51 | 显示全部楼层
1:
要看*(*p)[5]这里首先得看*array[5];因为array[5] 是一个指针数组,所以(*p)[5]必须也得是一个指向数组指针的指针。一句话就是你加*,我也加*。要不就都不加
   array[5]又必须得加* ,为什么,原因很简单,因为数组里面存放的是字符串,而C没有字符串的概念。所以就用指针数组来存入所谓“字符串”的第1个字符的地址。

看不加*的例子。字符:
int main()
{
        char a[5]={'A','B','C','D', 'E'}; // 注意 这里是字符
        char (*p3)[5] = &a;
        int i=0;

        for(i=0; i<5; i++)
        {
                printf("%c\n", (*p3)[i]);
        }

        return 0;
}

2:
char *array[5] = {"FishC",
                            "Five",
                            "Star",
                            "Good",
                            "WoW"};

正如前面所说,这是一个指针数组,每个字符串都是一个地址,i索引到地址,j则索引到里面的每个字符(道理跟2维数组一样)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-1 00:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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