完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。指针加1的结果等于原来的地址值加上指向的对象占用的总字节数。指针的相减将得到一个整数,仅当两个指针指向同一个数组时这种运算才有意义,这将得到两个元素的间隔。
例1: char a[20]; int *ptr=(int *)a; //强制类型转换并不会改变 a 的类型 ptr++; 在上例中,指针 ptr 的类型是 int*,它指向的类型是 int,它被初始化为指向整型变量 a。接下来的第 3 句中,指针 ptr 被加了 1,编译器是这样处理的: 它把指针 ptr 的值加上了 sizeof(int), 在 32 位系统中, 是被加上了 4,因为在 32 位程序中,int 占 4 个字节。由于地址是用字节做单位的,故 ptr 所指向的地址由原来的变量 a 的地址向高地址方向增加了 4 个字节。由于 char 类型的长度是一个字节,所以,原来 ptr 是指向数组 a 的第 0 号单元开始的四个字节,此时指向了数组 a 中从第 4 号单元开始的四个字节。 例2: int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int *pt = arr; //假设pt和arr的地址是3000 int *pe = &arr[9]; //则pe的地址是3036 int diff = pe - pt; //diff的值为9,因为一个 int 类型代表了4个字节 小结: 一个指针 ptrold 加(减)一个整数 n 后,结果是一个新的指针 ptrnew,ptrnew 的类型和 ptrold 的类型相同,ptrnew 所指向的类型和 ptrold所指向的类型也相同。 ptrnew 的值将比 ptrold 的值增加(减少)了 n 乘sizeof(ptrold 所指向的类型)个字节。就是说,ptrnew 所指向的内存区 将 比 ptrold 所 指 向 的 内 存 区 向 高 ( 低 ) 地 址 方 向 移 动 了 n 乘sizeof(ptrold 所指向的类型)个字节。 |
|
相关推荐
|
|
更多嵌入式,FPGA,安卓,PCB,java,Linux等学习,可以加楼主微信hr2848218839
|
|
|
|
|
|
2255 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2071 浏览 3 评论
4687 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2215 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 02:28 , Processed in 0.707975 second(s), Total 67, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号