指针的移动

指针移动与数组元素访问
本文介绍了在C语言中如何通过指针访问一维数组的元素。指针变量可以通过加法运算符移动到数组的下一个元素,但移动的距离取决于元素的大小。`p+1`并不总是移动4个地址,而是移动到下一个元素的地址。同时,`p[i]`与`*(p+i)`等价,表示数组的第i个元素。数组名`a`和`a+i`分别表示数组首地址和第i个元素的地址,二者在适当情况下可以互换。

那么如何使指针变量指向一维数组的其他元素呢?比如如何使指针变量指向 a[3],同样可以写成p = &a[3],但是除了这种方法之外,C语言规定:如果指针变量p已经指向一维数组的第一个元素,那么p+1就表示指向该数组的第二个元素。注意,p+1不是指向下一个地址,而是指向下一个元素。“下一个地址”和“下一个元素”是不同的。比如int类型数组中每一个元素都占 4 字节,每一个字节都有一个地址,所以int型数组中每一个元素都占4字节,每一个字节都有一个地址,所以 int 型数组中每一个元素都有 4 地址。如果指针变量 p 指向该数组的首地址,那么“下一个地址”就是表示 p 往后移动 4 个地址,即第二个元素的首地址。

#include<stdio.h>
int main(void)
{
	int a[] = {1, 2,3,4,5};
	int *p = a;
	printf("*p = %d, p + 1 = %d\n", p, p+1);
	printf("*p = %#X, p + 1 = %#X\n", p, p+1);
	printf("*p = %p, p + 1 = %p\n", p, p+1);
	return 0;
}

p+1,表示地址往后移动4个,但是并不是所有类型的数组 p+1都后移4个地址。p+1的本质是移动到数组的下一个元素的地址,所以关键是看数组是什么类型的,

知道元素的地址后引用元素就简单了,如果 p 指向的是第一个元素的地址,那么 p 表示的就是第一个元素的内容。同样,p+i表示的是第i+1个元素的地址,那么(p+i)就表示第i个元素的内容。即 p+i 就是指向元素a[i]的指针,*(p+i)就等于a[i];

博客
v8worker
05-08 2962
05-06 2946
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值