鱼C论坛

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

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

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

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

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

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

  2. 02.

  3. 03.int main()

  4. 04.{

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

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

  7. 07.        int i, j;

  8. 08.

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

  10. 10.        {

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

  12. 12.                {

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

  14. 14.                }

  15. 15.                printf("\n");

  16. 16.        }

  17. 17.

  18. 18.        return 0;

  19. 19.}
复制代码


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

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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

把里面的值都输出出来,遇到\0就停止输出了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

  10.         return 0;
  11. }
复制代码


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

正如前面所说,这是一个指针数组,每个字符串都是一个地址,i索引到地址,j则索引到里面的每个字符(道理跟2维数组一样)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-14 15:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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