是fafa也是花花 发表于 2022-10-25 12:03:31

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 12:19:19

本帖最后由 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。

是fafa也是花花 发表于 2022-10-25 14:09:26

jackz007 发表于 2022-10-25 12:19
& p 、& array 都是二维数组元素的内存地址。
      &p - & array 两个 ...

您好我可以这样理解吗

是fafa也是花花 发表于 2022-10-25 14:11:35

是fafa也是花花 发表于 2022-10-25 14:09
您好我可以这样理解吗

"D:\Desktop\1.png"

jackz007 发表于 2022-10-25 14:20:13

是fafa也是花花 发表于 2022-10-25 14:11


          看不到你贴出的图片。

是fafa也是花花 发表于 2022-10-25 14:35:13

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:51:01

本帖最后由 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

是fafa也是花花 发表于 2022-10-25 14:57:13

jackz007 发表于 2022-10-25 14:51
p 的一维索引是 11,array 的一维索引是 17,二者相差值为 -6

对的,我想说的是,我这样理解是正确的吗?另外,再次感谢您大佬{:7_125:}

jackz007 发表于 2022-10-25 15:00:51

是fafa也是花花 发表于 2022-10-25 14:57
对的,我想说的是,我这样理解是正确的吗?另外,再次感谢您大佬

         不好意思,没能看懂你的图。

是fafa也是花花 发表于 2022-10-25 15:09:00

jackz007 发表于 2022-10-25 15:00
不好意思,没能看懂你的图。

把二维数组看成线性的形式储存,用这个图来理解array和p的地址之差

jackz007 发表于 2022-10-25 15:10:38

是fafa也是花花 发表于 2022-10-25 15:09
把二维数组看成线性的形式储存,用这个图来理解array和p的地址之差

      7 楼的图解就是这个意思。
页: [1]
查看完整版本: printf("%d",(int)(&p[3][2] - &array[3][2]));