printf("%d",(int)(&p[3][2] - &array[3][2]));
#include <stdio.h>int main()
{
int array = {0}; //将array二维数组初始化为0;
int (*p) = (int(*))&array; //强制转换为一个长度为3的数组指针;
printf("%d",(int)(&p - &array));
return 0;
}
用VS编译出来的结果是-6,想问一下这里的&p所取的地址是多少呢?怎么取的呢? 本帖最后由 jackz007 于 2022-10-25 13:20 编辑
& p 、& array 都是二维数组元素的内存地址。
&p - & array 两个元素内存地址之差,单位是元素,如果这个差值是 x,那么,就是说,这两个元素的位置(索引)相差了 x 个元素。
p 和 array 都是二维数组,不同之处是,p 的末维是 3,而 array 是 5,p 指向了 arry 的开头,那么,p 和 array 存在什么区别呢?
我们知道,二维数组在内存中实际上是按照一维数组的顺序存放数据的,如果把二者视为一维数组,那么,p 其实就是 p = p,而 array = array = array,就是说,二者的索引相差了 11 - 17 = -6。 jackz007 发表于 2022-10-25 12:19
& p 、& array 都是二维数组元素的内存地址。
&p - & array 两个 ...
您好我可以这样理解吗 是fafa也是花花 发表于 2022-10-25 14:09
您好我可以这样理解吗
"D:\Desktop\1.png" 是fafa也是花花 发表于 2022-10-25 14:11
看不到你贴出的图片。 jackz007 发表于 2022-10-25 14:20
看不到你贴出的图片。
0
1 p
array 2
3
4
中间省略
10 p
11 p 相差
array 12 1
13 2
14 3
-----------------
15 4
16 5
array 17 array 6 结果为-6
本帖最后由 jackz007 于 2022-10-25 14:54 编辑
是fafa也是花花 发表于 2022-10-25 14:35
0
1 p
array 2
arrar -0 - p
1
2
3 - p
4
array -5
6 - p
7
8
9 - p
array - 10
11 - p
12 - p
13
14
array - 15 - p
16
array - 17
18 - p
19
array - 20
21 - p
22
23
24 - p
p 的一维索引是 11,array 的一维索引是 17,二者相差值为 -6 jackz007 发表于 2022-10-25 14:51
p 的一维索引是 11,array 的一维索引是 17,二者相差值为 -6
对的,我想说的是,我这样理解是正确的吗?另外,再次感谢您大佬{:7_125:} 是fafa也是花花 发表于 2022-10-25 14:57
对的,我想说的是,我这样理解是正确的吗?另外,再次感谢您大佬
不好意思,没能看懂你的图。 jackz007 发表于 2022-10-25 15:00
不好意思,没能看懂你的图。
把二维数组看成线性的形式储存,用这个图来理解array和p的地址之差 是fafa也是花花 发表于 2022-10-25 15:09
把二维数组看成线性的形式储存,用这个图来理解array和p的地址之差
7 楼的图解就是这个意思。
页:
[1]