鱼C论坛

 找回密码
 立即注册
查看: 1242|回复: 13

[已解决]S1E23动动手第二题求助

[复制链接]
发表于 2021-10-16 09:16:40 | 显示全部楼层 |阅读模式

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

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

x

#include<stdio.h>
int main()
{
        char *array[5] = { "FishC", "Five", "Star", "Good", "WoW" };
        int i, j;
        char *(*p)[5] = &array;        

        for (i = 0; i < 5; i++)
        {
                for (j = 0;*(*(*p+i)+j) != '\0'; j++)         //    *(*(*p+i)+j)   这里  和 *(*(p+i)+j)  有啥区别?
                {
                        printf("%c ", *(*(*p + i) + j));
                }
                printf("\n");
        }
               
        return 0;
}
最佳答案
2021-10-16 10:29:48
char *(*p)[5];
p = &array;

p+1=&array+1;//&array+1就是数组array后面和它结构一样的没有声明内存空间,里面当然没有初始化,谁知道是什么都是数值?

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

使用道具 举报

发表于 2021-10-16 09:41:01 | 显示全部楼层

回帖奖励 +27 鱼币

我认为前者是先取值加一
后者是地址加一再取值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-16 09:48:55 | 显示全部楼层
大马强 发表于 2021-10-16 09:41
我认为前者是先取值加一
后者是地址加一再取值

*(*(p+i)+j)  有啥区别?  是一堆乱码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-16 09:49:29 | 显示全部楼层
大马强 发表于 2021-10-16 09:41
我认为前者是先取值加一
后者是地址加一再取值

*(*(p+i)+j)   这个 是一堆乱码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-16 10:29:48 | 显示全部楼层    本楼为最佳答案   
char *(*p)[5];
p = &array;

p+1=&array+1;//&array+1就是数组array后面和它结构一样的没有声明内存空间,里面当然没有初始化,谁知道是什么都是数值?

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

使用道具 举报

发表于 2021-10-16 10:41:48 | 显示全部楼层
  1. { "FishC", "Five", "Star", "Good", "WoW" };
复制代码

这个你可以看成一个二维的数组就好理解了
  1. """      j
  2.      i "FishC"
  3.         "Five"
  4.         "Star"
  5.         "Good"
  6.         "WoW"
  7.     *p+i ->第i行的地址,你可以
  8.     *(*p+i) 就表示第i行的字符串的首地址 可以试试用 printf("%s",*(*p+i)) 来验证
  9.     同理可得 *(*p+i) + j 表示 第i行偏移j位的地址
  10.     (*(*p+i) + j) 表示 第i行偏移j位的地址 的值

  11. """
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-10-16 10:54:12 | 显示全部楼层
大马强 发表于 2021-10-16 10:41
这个你可以看成一个二维的数组就好理解了

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

使用道具 举报

 楼主| 发表于 2021-10-16 15:58:37 | 显示全部楼层
jhq999 发表于 2021-10-16 10:29
char *(*p)[5];
p = &array;

#include <stdio.h>

int main()
{
        int array[3][4] = {
                {0, 1, 2, 3},
                {4, 5, 6, 7},
                {8, 9, 10, 11} };
        int(*p)[4] = array;
        int i, j;

        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 4; j++)
                {
                        printf("%3d", *(*(p+i)+j));      // 那这里为什么又可以*(p+i)呢?
                }
                printf("\n");
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-16 17:46:42 | 显示全部楼层

  1. p=array;
  2. p+i=array+i=array[i]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-16 18:33:33 | 显示全部楼层

为啥一个等于array 一个等于&array
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-16 18:34:50 | 显示全部楼层

这个怎么判断? 麻烦了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-16 18:43:48 | 显示全部楼层

就是前面定义 指针的时候   后面什么情况 是array  什么情况是 &array
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-16 19:00:47 | 显示全部楼层
18971811635 发表于 2021-10-16 18:43
就是前面定义 指针的时候   后面什么情况 是array  什么情况是 &array


前面是一维数组,后面的是二维数组
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-21 09:05:20 | 显示全部楼层
大马强 发表于 2021-10-16 10:41
这个你可以看成一个二维的数组就好理解了

  char *(*p)[5] = &array;    为啥不能定义成  char (*p)[5] = array; 呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 01:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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