马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main()
{
int array[5][5] = {0}; //将array二维数组初始化为0;
int (*p)[3] = (int(*)[3])&array; //强制转换为一个长度为3的数组指针;
printf("%d",(int)(&p[3][2] - &array[3][2]));
return 0;
}
用VS编译出来的结果是-6,想问一下这里的&p[3][2]所取的地址是多少呢?怎么取的呢?
本帖最后由 jackz007 于 2022-10-25 13:20 编辑
& p[3][2] 、& array[3][2] 都是二维数组元素的内存地址。
& p[3][2] - & array[3][2] 两个元素内存地址之差,单位是元素,如果这个差值是 x,那么,就是说,这两个元素的位置(索引)相差了 x 个元素。
p 和 array 都是二维数组,不同之处是,p 的末维是 3,而 array 是 5,p 指向了 arry 的开头,那么,p[3][2] 和 array[3][2] 存在什么区别呢?
我们知道,二维数组在内存中实际上是按照一维数组的顺序存放数据的,如果把二者视为一维数组,那么,p[3][2] 其实就是 p[3 * 3 + 2] = p[11],而 array[3][2] = array[5 * 3 + 2] = array[17],就是说,二者的索引相差了 11 - 17 = -6。
|