指针的算术运算

本文介绍了指针在进行算术运算时的情况,特别是指针加1(或-1)的实际含义。指针加1并不总是增加一个字节,而是基于指针类型调整,如int指针加1会增加4个字节。同时,指针之间的相减可以得到它们间单元格的数量,但指针加法直接相加则可能产生非法地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针+1(-1同理)

给定一个数组,数组指针+1可能表示为三种情况:

1.加一个字节 :程序出错

2.加整个数组:这个操作完全没意义。

3.加一个单元格:一个单元格几个字节是根据定义的指针的类型来定的,例如char,指针加1就是一个字节,即一个单元格。

总结:指针加法需要调整(加1单元格),调整的权重为指针去掉一个星号,然后求指针sizeof,例如  

int*p; p+1为加4个字节=sizeof(int)

又例如  char**p; p+1为加4个字节=sizeof(char*),指针在32位的操作平台为4位。

 

 

指针-指针

int *p=arr;

int *q=&arr[5];

p+q   // 非法,为一个未知的地址

q-p //合法,可以算出间隔的字节数,再除以权重,可以计算出间隔的单元格数。

例如: 

int *p=arr[1]; int *q=arr[9];

即 (int*)q-(int*)p=8=32/4  //4为权重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值