数组相关的指针

二维数组指针 分析 :

int (*p)[5] ; / *这里的 int (*p)[5] 是一个行级指针, 指向一行5个元素 , 但是P本身也是一个内存地址 , 只站用 int 型内存单元 */

                   /* p 是一个行级指针 , p++ 指的是下一行 , *p是元素级别指针 , (*p)++ 指的是下一个元素 , 但是*p也是一个指针 , *((*p)++) 才是下一个元素的值 */

                   /* p 和 *p 在C中有可能值是相同的( 都是第一个元素的地址 ) , 但是 是完全不同的两个方面 */

1. (*p)[4] 和 *p[4] 的区别 :

     (*p)[4]是定义一个指向一维数组的行级指针 , 这个一维数组有4个元素 , 而 *p[4] 是定义了一个包含4个指针元素的指针数组 . 用sizeof()计算两个p , 发现第一个 p 的大小是 4, 

      即 它是一个指针 , 第二个p的大小是16 , 因为它是一个包含 4 个指针的数组 . ( 本质上 : 第一个 p 是指针 , 第二个 p 是数组 )

 2. 

Array[0] 0 123
Array[1] 4 567
Array[2] 8 91011

上图表示了二维数组的存储方法 , Array[0] ~ Array[2] 表示各一维数组的首地址 , 二维数组名 Array 表示整个二维数组的首地址 , 它和 Array[0] , Array[0][0] 是同一个地址 .

 但是它们表示的级别是不同的 , 因此不能混用 . ( 特别是 p++ 操作 )

 另外 : Array[1] 与 &Array[1] 输出的内容是相同的 , 都是第一行的首地址 , 但是它们的含义是不同的 , Array[1] 是元素级别的 , 是 int * , 而 &Array[1]是行级别的 ( C 中可能没有这么使用 ) , 是 int (*p)[4]

 也就是 , Array[1] + 1 , 指针移动到下个元素位置 , &Array[1] + 1 , 指针移动到下一行的位置 .

 理解 : 首先二维数组可以当作一维数组 , 而每一维又是包含4个元素的数组 , 而 &Array[1] , 操作符是取地址的意思 , 而 Array[1] 本就是地址 , 所以...&Array[1]是行级指针.  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值