鱼C论坛

 找回密码
 立即注册
查看: 1065|回复: 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后面和它结构一样的没有声明内存空间,里面当然没有初始化,谁知道是什么都是数值?

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

使用道具 举报

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

回帖奖励 +27 鱼币

我认为前者是先取值加一
后者是地址加一再取值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

*(*(p+i)+j)  有啥区别?  是一堆乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

*(*(p+i)+j)   这个 是一堆乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

发表于 2021-10-16 10:41:48 | 显示全部楼层
{ "FishC", "Five", "Star", "Good", "WoW" };
这个你可以看成一个二维的数组就好理解了
"""      j
     i "FishC" 
        "Five"
        "Star"
        "Good"
        "WoW"
    *p+i ->第i行的地址,你可以
    *(*p+i) 就表示第i行的字符串的首地址 可以试试用 printf("%s",*(*p+i)) 来验证
    同理可得 *(*p+i) + j 表示 第i行偏移j位的地址
    (*(*p+i) + j) 表示 第i行偏移j位的地址 的值

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

使用道具 举报

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

感谢!
想知道小甲鱼最近在做啥?请访问 -> 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

p=array;
p+i=array+i=array[i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

为啥一个等于array 一个等于&array
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个怎么判断? 麻烦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是前面定义 指针的时候   后面什么情况 是array  什么情况是 &array
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


前面是一维数组,后面的是二维数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  char *(*p)[5] = &array;    为啥不能定义成  char (*p)[5] = array; 呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 17:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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