鱼C论坛

 找回密码
 立即注册
查看: 1968|回复: 8

[已解决]带你学C带你飞 S1e24课后习题问题

[复制链接]
发表于 2017-3-20 15:32:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Hacker_Jack 于 2017-3-20 20:21 编辑

甲鱼的作业解析有一道题看不懂。求鱼油给予详细解说,那个二维数组是怎么变出来的。
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int array[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  5.         int (*p)[3] = (int (*)[3])&array;

  6.         printf("%d\n", p[2][2]);

  7.         return 0;
  8. }
复制代码

就是这句 int (*p)[3] = (int (*)[3])&array;甲鱼说等式后的语句让原先的数组重新划分为3*3的二维数组
我表示看不懂。。
最佳答案
2017-3-20 22:26:57
(*p)[3]其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维数组排成一个3X3的二维数组,第一行a[0]={1,2,3} ,第二行a[1]={4,5,6},第三行a[2]={7,8,9},所以p[2][2]就是第三行的第三列了,所得为9.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-20 21:06:42 | 显示全部楼层
没人吗。。。大半天过去了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-20 22:13:02 | 显示全部楼层

回帖奖励 +3 鱼币

          0  1  2
     0   1  2  3
     1   4  5  6
     2   7  8  9

关于指针和下标的问题,你再看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-20 22:26:57 | 显示全部楼层    本楼为最佳答案   
(*p)[3]其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维数组排成一个3X3的二维数组,第一行a[0]={1,2,3} ,第二行a[1]={4,5,6},第三行a[2]={7,8,9},所以p[2][2]就是第三行的第三列了,所得为9.

评分

参与人数 1荣誉 +2 鱼币 +3 贡献 +2 收起 理由
Hacker_Jack + 2 + 3 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-3-21 09:28:48 From FishC Mobile | 显示全部楼层
sdsaf 发表于 2017-3-20 22:26
(*p)[3]其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维 ...

我主要是不明白后面那个强制转换的原理,我在编译器里试过,&加不加都能正常编译运行,结果也完全正常,那么这个&有什么用呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 11:30:33 | 显示全部楼层
Hacker_Jack 发表于 2017-3-21 09:28
我主要是不明白后面那个强制转换的原理,我在编译器里试过,&加不加都能正常编译运行,结果也完全正常, ...

感觉不太清楚啊,毕竟数组名也就是地址了,没必要再多个&了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 13:51:04 | 显示全部楼层
array 和 &array 的值虽然相同,但意义不一样啊
array 表示数组第一个元素的位置,&array表示的是整个数组的位置

评分

参与人数 1荣誉 +2 鱼币 +3 贡献 +3 收起 理由
Hacker_Jack + 2 + 3 + 3

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-3-21 19:50:38 | 显示全部楼层
泡泡北斗星 发表于 2017-3-21 13:51
array 和 &array 的值虽然相同,但意义不一样啊
array 表示数组第一个元素的位置,&array表示的是整个数组 ...


我就是知道意义不一样所以才问这个的。如果表示数组第一个元素,那么p+1跨度为二维数组的1列,如果表示整个二维数组,那么p+1的跨度就是整个数组了,等号左右的类型虽然一致但是大小就对不上了啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 22:55:34 | 显示全部楼层
Hacker_Jack 发表于 2017-3-21 19:50
我就是知道意义不一样所以才问这个的。如果表示数组第一个元素,那么p+1跨度为二维数组的1列,如果表示 ...

int(*p)[3] = (int(*)[3])&array;
写成
int(*p)[3] = (int(*)[3])array;
也是可以的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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