C语言 指针变量和整数的运算

在C 语言中,指针也能进行自加、自减运算以及与整数做加减运即让指针变量加、减1或者加上一个整数、减一个整数都是合法的运算。

指针运算与整数的运算并不相同,指针变量运算的时候,表示了数据的移动。

float X ,*pf=&x ;

假设变量X 的地址为4 0 0 0 H , pf+5所表示的地址值为4000H+5*4=4014H 因此表示了当前地址开始往后移动了5 个元素。

指针的自加,利用数组分配连续的存储空间, 设数组的存储地址是从ff00 开始的,令 P 保存数组a 中元素a[1]的地址,则执行运算P++以后,指针后移一个元素,那么 P 的值为ff04。
在这里插入图片描述
同样,如执行P + 2 ,则在当前位置后移一个元素。要想在指针运算的同时取出数组中相应地址中的元素, 有下面的规则:

  • *p++相当于 *(p++), 若P的当前值为ff02 ,后缀自加表达式的值为ff02, 利用指向运算符得到此地址指向的数据为5 , 当前指针P 的值为ff04。 由于后++优先级高于*,应该先p++,后取值,但因为是后++,所以先执行*p,然后等赋值完成以后,p再++

  • (*p)++ 相当于对P指向的数据进自增运算, 若P指向数组中a [1] , 那么表达式相当于a [ l]++ , a[l]的值为6。

  • *++p相当于 *(++p) ,若P指向数据元素a[l],那么前缀自加加表达式的值为ff04, 取出当前的元素9 , 此时P的值力ff04。

int main() { 
	int a[5],i;
	int *p;										/*定义一个整型指针变量p*/
	for (i=0;i<5;i++)
		a[i]=i+2;
	p=&a[1];										/*将数组a[1]的地址赋值给p*/
	printf("the address %x,the data is %d.\n",p,*p);
	p++;											/*指针下移*/
	printf("the address %x,the data is %d.\n",p,*p);
	p=&a[1];										/*重新将p指向a[1]*/
	printf("the address %x,the data is %d.\n",p,*p++);
	p=&a[1];
	printf("the address %x,the data is %d.\n",p,*++p);
	return 1;
}

在这里插入图片描述

发布了240 篇原创文章 · 获赞 85 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/imxlw00/article/details/92405788
今日推荐