带你学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的二维数组
我表示看不懂。。 没人吗。。。大半天过去了。。 012
0 123
1 456
2 789
关于指针和下标的问题,你再看看 (*p)其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维数组排成一个3X3的二维数组,第一行a={1,2,3} ,第二行a={4,5,6},第三行a={7,8,9},所以p就是第三行的第三列了,所得为9. sdsaf 发表于 2017-3-20 22:26
(*p)其实是指向多维数组元素的指针变量,中括号里的数字3就是二维数组里的列数。也就是把array这个一维 ...
我主要是不明白后面那个强制转换的原理,我在编译器里试过,&加不加都能正常编译运行,结果也完全正常,那么这个&有什么用呢? Hacker_Jack 发表于 2017-3-21 09:28
我主要是不明白后面那个强制转换的原理,我在编译器里试过,&加不加都能正常编译运行,结果也完全正常, ...
感觉不太清楚啊,毕竟数组名也就是地址了,没必要再多个&了 array 和 &array 的值虽然相同,但意义不一样啊
array 表示数组第一个元素的位置,&array表示的是整个数组的位置 泡泡北斗星 发表于 2017-3-21 13:51
array 和 &array 的值虽然相同,但意义不一样啊
array 表示数组第一个元素的位置,&array表示的是整个数组 ...
我就是知道意义不一样所以才问这个的。如果表示数组第一个元素,那么p+1跨度为二维数组的1列,如果表示整个二维数组,那么p+1的跨度就是整个数组了,等号左右的类型虽然一致但是大小就对不上了啊。 Hacker_Jack 发表于 2017-3-21 19:50
我就是知道意义不一样所以才问这个的。如果表示数组第一个元素,那么p+1跨度为二维数组的1列,如果表示 ...
int(*p) = (int(*))&array;
写成
int(*p) = (int(*))array;
也是可以的
页:
[1]