对指针的基本操作

可以对指针进行哪些操作?、

1)检索指针的值(该指针指向的地址)

2)检索储存在,指针所指向的地址上的值

3)检索指针自己的地址

#include<stdio.h>
int main()
{
	int urn[5] = {100, 200, 300, 400, 500};
	int *ptr1, *ptr2, *ptr3;
	ptr1 = urn ;                             //把数组urn的第一个地址赋给指针ptr1
	ptr2 = &urn[2];                          //数组第三个变量的地址赋值给指针ptr2 
	
    printf("pointer value, dereferenced pointer, pointer adress: \n");     //指针的值,解引用指针,指针地址 
	printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p", ptr1, *ptr1, &ptr1);
	
	//指针的加法--->指针加1,指针的值递增它所指向类型的大小
	ptr3 = ptr1 + 4;
	printf("\nadding an int to a pointer:\n");
	printf("ptr1 + 4 = %p, *(ptr1 + 4) = %d\n", ptr1 + 4, *(ptr1+4)); 
	
	//递增指针
	ptr1 ++;
	printf("\nvalues after ptr1 ++ :\n");
	printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p\n", ptr1, *ptr1, &ptr1);
	
	//递减指针
	ptr2 --;
	printf("\nvalues after --ptr2\n");
	printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n", ptr2, *ptr2, &ptr2); 
	
	-- ptr1;                                 //指针ptr1恢复为初始值
	++ ptr2;                                 //指针ptr2恢复为初始值
	printf("\npinters reset to oringinal values:\n");
	printf("ptr1 = %p, ptr2 = %p\n", ptr1, ptr2);
	
	//一个指针减去另一个指针
	printf("\nsubstracting one pointer from another:\n");
	printf("ptr2 = %p, ptr1 = %p, ptr2 - ptr1 = %td\n", ptr1, ptr2, ptr2 - ptr1); 
	
	//一个指针减去一个整数
	printf("\nsubstracting an int from a pointer:\n");
	printf("ptr3 = %p, ptr - 1 = %p, ptr3 - 2 = %p\n", ptr3, ptr3 -1, ptr3 - 2); 
	
	return 0;
 } 

 

说明:

1)赋值:可以把地址赋给指针,例如数组名、带地址运算符的变量,另一个指针进行赋值;需要注意的是地址应和指针类型兼容

2)解引用: *运算符可以检索指针,指向的地址上储存的值,因此*ptr1的初始值为100,该值储存在编号为 000000000062FE00的地址上

3)取址:和所有的变量一样,指针变量也有自己的地址和值,对于指针变量来说,&运算符给出指针本身的地址,例如ptr1的地址为: 000000000062FDF8

4)指针和整数相加:可以使用 + 把指针和整数进行相加,整数会先和指针所指向的类型的大小(以字节为单位)相乘,再和指针的初始地址相加,因此 ptr1 + 4 与 &urn[4] 相等

5)递增指针:递增指向数组元素的指针,会让指针指向下一个数组元素

6)指针减去一个整数:int类型的指针减去1,指针的值会减去1 * 4,指针指向的数组元素会往上移一位

7)递减指针:递减指针和递增指针类似,每递减一次,指针的值会减去4,指针所指向的数组元素会往上移动一位

8)指针求差:可以计算两个指针的差值,一般情况下计算差值的两个数组是指向同一个数组中的两个不同的数组元素,通过计算差值可以两个数组元素之间的距离,差值的单位和数组类型的单位相同

9)比较:使用关系运算符可以比较两个指针的大小,前提是两个指针变量都指向同一类型的对象

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值