指针数组与数组指针的区别

话不多说,直接上代码运行,运行如下代码

#include <stdio.h>

int main()
{
	int *arry[10];
	int (*arryp)[10] = &arry;
	for (int i = 0; i < 10; i++)
	{
		printf("arry[%d]的地址为: %p\n",i,&arry[i]);
		printf("arryp[%d]的地址为: %p\n", i, arryp[i]);
	}
}

运行结果

arry[0]的地址为: 00D9FC8C
arryp[0]的地址为: 00D9FC8C
arry[1]的地址为: 00D9FC90
arryp[1]的地址为: 00D9FCB4
arry[2]的地址为: 00D9FC94
arryp[2]的地址为: 00D9FCDC
arry[3]的地址为: 00D9FC98
arryp[3]的地址为: 00D9FD04
arry[4]的地址为: 00D9FC9C
arryp[4]的地址为: 00D9FD2C
arry[5]的地址为: 00D9FCA0
arryp[5]的地址为: 00D9FD54
arry[6]的地址为: 00D9FCA4
arryp[6]的地址为: 00D9FD7C
arry[7]的地址为: 00D9FCA8
arryp[7]的地址为: 00D9FDA4
arry[8]的地址为: 00D9FCAC
arryp[8]的地址为: 00D9FDCC
arry[9]的地址为: 00D9FCB0
arryp[9]的地址为: 00D9FDF4

从上面的输出我们可以看书,arry里面保存的地址相差四个地址,而arryp里面的地址相差40个地址、同样都是对一个变量取地址,为什么区别那么大呢?

首先,我们需要对定义的两个变量进行解析

int *arry[10];

按照c语言的运算符顺序,该变量解释为,先定义一个数组,数组里面可以存放10个元素,每个元素的类型为int*,也就是说,这是一个数组,数组里面每个元素的类型都是整数类型的指针

int (*arryp)[10] = &arry;

以上代码解释为,定义了一个指针变量,该变量能存放10个数组的首地址,数组里面存放的元素类型为int型

由此可知,arry为定义一个数组,里面存放了10个int元素的指针,每个int类型为4个字节,10个元素共计40个字节。这也就为什么会存在arry + 1只增加4个地址,而arryp+1增加40个地址的原因了,前者的加1步进为4个地址,加1,表示加一个int类型的大小,而后者+1,表示加一个数组地址的大小,而代码中赋值的首地址为40个字节,故+1就加了40个字节

从打印的arry的最后一个地址和arryp的第二个地址不难看书,两个地址相差了4个地址,这不正是一个整型地址的大小吗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值