指针的操作
赋值:使用数组名或者地址运算符&来进行地址赋值。
取值:使用*可以取出指针指向的地址中存储的数值。
取指针地址:使用&可以去指针地址。
整数加给指针:整数会和指针所指向的类型的字节数相乘,然后所得结果加到初始地址上。
增加指针的值:使指针指向同类型的下一个元素。
从指针中减去一个整数:这个整数回合指针所指类型的字节数相乘,然后所得结果被初始地址减去。
减小指针的值:使指针指向同类型的上一个元素。
求差值:如果两个指针指向同一个数组,则求出的差值是元素之间的距离,差值的单位是相应类型的大小。
- #include<stdio.h>
- int main(void){
- int urn[5] = {100,200,300,400,500};
- int *ptr1,*ptr2,*ptr3;
- ptr1 = urn;
- ptr2 = &urn[2];
- printf("ptr1=%p,*ptr1=%d,&ptr1=%p\n",ptr1,*ptr1,&ptr1);//分别打印ptr1中的内容(存储的地址)、ptr1存储的地址所存得值,
- //ptr1本身的地址
- printf("ptr1+4=%p,*(ptr1+4)=%d\n",ptr1+4,*(ptr1+4));//int是4字节,所以指针+4相当于指针+(4*4)字节
- ptr1++;
- printf("ptr1=%p,*ptr1=%d,&ptr1=%p\n",ptr1,*ptr1,&ptr1);//ptr1自身的地址是不会变的,只是存储的地址增大了一个单位(4字节)
- ptr1--;
- printf("ptr1=%p,ptr2=%p,ptr2-ptr1=%d\n",ptr1,ptr2,ptr2-ptr1);//两个指针相减的结果不是存储地址的字节差,而是存储结果的字节差/类型大小
- //即两个指针相差的元素单位个数
- printf("ptr2=%p,ptr2-2=%p",ptr2,ptr2-2);//指针与一个整数相减,运算过程也不是存储的地址减去整数,而是存储的地址减去(整数*类型大小)
- }
转载于:https://blog.51cto.com/fanaticssk/826859