Hacker_Jack 发表于 2017-3-20 15:32:40

带你学C带你飞 S1e24课后习题问题

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

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

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

      printf("%d\n", p);

      return 0;
}
就是这句 int (*p) = (int (*))&array;甲鱼说等式后的语句让原先的数组重新划分为3*3的二维数组
我表示看不懂。。

Hacker_Jack 发表于 2017-3-20 21:06:42

没人吗。。。大半天过去了。。

脱鞋大王 发表于 2017-3-20 22:13:02

          012
   0   123
   1   456
   2   789

关于指针和下标的问题,你再看看

sdsaf 发表于 2017-3-20 22:26:57

(*p)其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维数组排成一个3X3的二维数组,第一行a={1,2,3} ,第二行a={4,5,6},第三行a={7,8,9},所以p就是第三行的第三列了,所得为9.

Hacker_Jack 发表于 2017-3-21 09:28:48

sdsaf 发表于 2017-3-20 22:26
(*p)其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维 ...

我主要是不明白后面那个强制转换的原理,我在编译器里试过,&加不加都能正常编译运行,结果也完全正常,那么这个&有什么用呢?

sdsaf 发表于 2017-3-21 11:30:33

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

感觉不太清楚啊,毕竟数组名也就是地址了,没必要再多个&了

泡泡北斗星 发表于 2017-3-21 13:51:04

array 和 &array 的值虽然相同,但意义不一样啊
array 表示数组第一个元素的位置,&array表示的是整个数组的位置

Hacker_Jack 发表于 2017-3-21 19:50:38

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

我就是知道意义不一样所以才问这个的。如果表示数组第一个元素,那么p+1跨度为二维数组的1列,如果表示整个二维数组,那么p+1的跨度就是整个数组了,等号左右的类型虽然一致但是大小就对不上了啊。

人造人 发表于 2017-3-21 22:55:34

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

int(*p) = (int(*))&array;
写成
int(*p) = (int(*))array;
也是可以的
页: [1]
查看完整版本: 带你学C带你飞 S1e24课后习题问题