指针进阶之指针运算

当初博主在大学学指针的时候可谓是一头包,尤其后面学到二维指针,什么指针数组啊,指针字符串啊。什么的更是云里雾里。不明其中道理

其中如果涉及到指针运算什么的更是痛不欲死。

现简单的将我当时遇到的情况以及如何解决的过程思路分享出来

指针及数组

我们简单定义一个数组

int array[5];

array是数组名,array代表的是数组整块内存,即sizeof(array)= = 20假设sizeof(int) == 4,array的内容是数组的首地址即arr =  &arr[0];array也可以看做是一个常量,也就是不能有array++

之类的运算

int *p;

p=array;

p是指向Int 类型的指针变量,p=array是吧数组的首地址赋给p,也就是说p代表的是数组首地址,然后由于p是一个变量,可以进行变量的很多操作也就是说可以进行p++之类的操作

所以sizeof(p) == sizeof(int *) ==4  一般都是等于这个值的

同理运用到字符串数组这么一分析是不是一目了然

紧接着:

int a[5] = {0,1,2,3,4};

int *p = (int *)(&a+1);

cout<<*(a+1)<<<<*(p-1);

a 是 代表的是整个数组内存,a 的值是该数组内存的首地址, 对 a 取地址(&a)这里的 &a 是指向整个数组的内存块,所以 a 的值与 &a 的值是一样的,都是该数组的首地址,但他们的含义是不一样的。

所以结果应该为

1,4



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值