指针算术

来源:本站
导读:目前正在解读《指针算术》的相关信息,《指针算术》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《指针算术》的详细说明。
简介:指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。指针加1的结果等于原来的地址值加上指向的对象占用的总字节数。指针的相减将得到一个整数,仅当两个指针指向同一个数组时这种运算才有意义,这将得到两个元素的间隔。

指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。指针加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 所指向的类型)个字节。

提醒:《指针算术》最后刷新时间 2024-03-14 00:54:43,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《指针算术》该内容的真实性请自行鉴别。