指针与数组

我们知道当定义一个变量后,系统会为这个变量分配内存空间,那么变量名就是这个空间的名字,这个空间可以保存值,这个空间有地址。

如:int num = 5;

这是一个整型变量,系统为这个变量分配了内存空间,num就是就是这个内存空间的名字,5就是保存在这个空间里的值,这个空间有地址。

num++:就是num对应的空间里的值加1,即5+1。

int *p = #

这是定义了一个指针变量,并初始化了,系统为这个指针变量分配了内存空间,p就是这个内存空间的名字,num的地址就是保存在这个空间里的值,这个空间本身也有地址。

  p++:               就是p对应的内存空间里的值加1,即num的地址。

(*p)++:         就是p指向的内存空间里的值加1,即num的值。

int ** pp =&p;

这是定义了一个二维指针变量,系统为这个变量分配了内存空间,pp就是这个内存空间的名字,指针p的地址就是保存在这个空间里的值,这个空间本身也有地址。

  pp++:               就是pp对应的内存空间的值加1,即p的地址。

(*pp)++:        就是pp指向的内存空间的值加1,即num的地址。

(**pp)++:      就是pp指向的指针指向的内存空间的值加1,即num的值。

注:指针加1是加一个步长,不同的指针有不同的步长,由指针的类型决定。

像三维指针甚至更高维度的指针都是这样一层一层嵌套的。


对于数组我们需要弄清楚对数组名取地址与对数组地址取值之间关系。

首先对于一维数组,一维数组名是一个指针常量,它保存的是数组首元素的地址。

对一维数组名取地址等于一维数组的地址。

对一维数组的地址取值等于一维数组首元素的地址。

注:对数组的地址加一就是加一个数组的长度。数组首元素地址加一就是指向下一个元素的地址。

二维数组:

二维数组名是一个指针常量,它保存的是首个一维数组的地址。

对二维数组名取地址等于二维数组的地址。

对二维数组的地址取值等于二维数组中首个一维数组的地址。

例:*(*(a+i)+j)

 a+i:                           第i+1个一维数组的地址。

*(a+i):                   第i+1 个一维数组的首元素的地址。

*(a+i)+j :                    第i+1个一维数组的第j+1个元素的地址。

*(*(a+i)+j):            第i+1个一维数组的第j+1个元素的值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值