数组指针 指针数组 多维指针

先把结论记在这:
指针数组

int* a[5];此类型为int* 类型的5个,是数组

数组指针

int (*a)[5]; 是一个指向int[5]的指针

下面做个试验操作一下记住结论:

int arr[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };

int main(int argc, char* argv[])
{
	int(*p)[2];
	p = (int(*)[2])arr;
	printf("%d\n", *(*p));
	printf("%x-------------%x\n", p, *p);
	printf("%d\n", *(*(p + 0) + 0));
	printf("%d\n", *(*(p + 1)+1));
	return 0;
}

打印结果:
在这里插入图片描述
第一条打印结果就不解释了。
第二条打印结果可能开始会毁三观
在这里插入图片描述
1、从汇编中看不出什么特别的,只能自己编个理由记住它,p的类型为 int()[2],从最上面结论看,是一个指向int[2]类型的指针,而int[2]本身存储的首先是首地址,所以p是次数组的首地址,而p是转化为int[2]后的数组int[2]的首地址。
第四条打印便可以看出其中的p与*p并非没有区别
根据上一篇介绍的指针运算可以知道,p加1时实际是加了八个字节,*p加1时,实际是加了四个字节,因为p指向int[2],*p指向int。所以我们一共往后数十二个字节,便可得出4.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值