C语言——指针的算术运算。

指针就是内存单元的地址,因此指针也是一种数据,是一个值。因此指针也有属于自己的算术运算。指针的算术运算大概可以分为这么几类:

        1、指针与数字的运算   2、指针与指针的运算

一、指针与数字的运算。

      首先,我们要先定义一个数组arr[],然后在定义一个整型指针*p,让指针*p来保存数组arr[]的地址,也就是保存数组arr[]的首地址。

int arr[10] = {1,2,3};
int *p = arr;

指针加一个数字就是这个指针向右移动几个单元格,指针减几个数字就是向左移动几个单元格。

指针p + 1就是代表指针向右移动一个单元格。

指针p - 1就是代表指针向左移动一个单元格。

例如:我们给arr[0]赋值为10,arr[1]赋值为20,我们可以通过以下语句来实现

*p = 10;  
p++;                 
*p = 20;  

如图所示:


我们利用printf将结果输出,可以得到


同理指针减数字也是一样的,指针向左移动


如果我们知道指针的所指的的地址之后,怎么才能计算出指针进行运算后的地址呢?

这个时候我们就需要一定的数据调整,而调整的权重为sizeof(不同的数据类型,权重不同,如int为4个字节,double为8个字节),如下图示例:

int main()
{
	int *p = (int *)2000;
	printf("%d\n",p+4);
	printf("%d\n",(short *)p+4);
	printf("%d\n",(double *)p+4);//2032
	printf("%d\n",(float **)p+4);
	printf("%d\n",(unsigned short *)p+4);
	printf("%d\n",(long *)p+4);
	printf("%d\n",(char *)p+4);
	printf("%d\n",(unsigned long long)p+4);
	return 0;
}

可以得到以下结果

这就是指针加数字的算法。

再来说指针与指针的运算,首先指针+指针是没有意义的,所以我们只研究指针减指针。

指针减指针只能存在与同一个数组的两个指针中进行。

我们分别定义两个指针和一个数组,并让两个指针分别指向这个数组的首元素和末尾元素。如下

int main()
{
	int arr[10] = {1};
	int *p = &arr[1];//x+4
	int *q = &arr[9];//x+36
	printf("%d\n",p-q);
	printf("%d\n",q-p);
	printf("%d\n",(short *)q-(short *)p);
	printf("%d\n",(double *)q-(double *)p);
	printf("%d\n",(char *)q-(char *)p);
	return 0;
}

可以得到:


总结:指针的所有算术运算都需要调整,调整的权重为sizeof。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值