指针操作---------赋值,解引用,取值,指针与整数相加,递增指针,指针减去一整数,递减指针,指针求差,比较
#include <stdio.h>
int main(int argc, const char * argv[]) {
int urn[5] = {100,200,300,400,500};
int *ptr1,*ptr2,*ptr3;
// 把一个地址赋给指针
2];
printf("pointer value,dereferenced pointer ,pointer address:\n");
printf("ptr1 = %p,*ptr1 = %d,&ptr1 = %p\n",ptr1,*ptr1,&ptr1);
4;
printf();
printf("ptr1 + 4 = %p, *(ptr1 +4 ) = %d\n",ptr1+4,*(ptr1 + 4));
printf("ptr1 + 2 = %p, *(ptr1 +2 ) = %d\n",ptr1+2,*(ptr1 + 2));
//递增指针
printf("\nvalues after ptr1++ :\n");
printf("ptr1 = %p,*ptr1 = %d,&ptr1 = %p\n",ptr1,*ptr1,&ptr1);
//递减指针
printf("\nvalues after ---ptr2:\n");
printf("ptr2 = %p,*ptr2 = %d,&ptr2 = %p\n",ptr2,*ptr2,&ptr2);
//恢复为初始值
//恢复为初始值
printf("\nPointers reset to original values:\n");
printf("ptr1 = %p,ptr2 = %p\n",ptr1,ptr2);
printf("\nsubtracting one pointer from another:\n");
printf("ptr2 = %p ,ptr1 = %p ,ptr2 -ptr1 = %td\n",ptr2,ptr1,ptr2 - ptr1);
printf("\nsubtracting an int from a pointer:\n");
printf("ptr3 = %p,ptr3 - 2 = %p \n",ptr3, ptr3 - 2);
printf("ptr3 = %p,ptr3 + 2 = %p \n",ptr3, ptr3 + 2);
return 0;
}
1.赋值,可以吧地址赋值给指针。如,用数组名,带地址运算符(&)的变量名,两外一个指针进行赋值,在该例中,吧urn数组的手地址给ptr1,该地址的编号恰好是0x7ffeefbff540,变量ptr2获得数组urn的第三个元素(urn[2])的地址。注意,地址应该和指针兼容。也就是说,不能吧double类型的地址赋给指向int的指针,至少避免不明智的类型转换。
4.指针与证书相加:可以使用+运算符吧指针与证书相加,或证书与指针相加,无论那种情况,证书都会和指针所指向类型的大小(依字节为单位)相乘,然后吧结果与初始化地址相加。因此ptr1+4与&urn[4]等价的。如果想家的结果超出了初始化指针指向的数组范围,计算结果则是未定义的。除非正好超过数组末尾第一个位置,C保证指针有效。
PS:注意这两个减法有两种,可以用一个指针减去另外一个指针得到一个整数,活用一个指针减去一个整数得到另外一个指针。
pointer value,dereferenced pointer ,pointer address:
ptr1 = 0x7ffeefbff540,*ptr1 = 100,&ptr1 = 0x7ffeefbff528
ptr1 + 4 = 0x7ffeefbff550, *(ptr1 +4 ) = 500
ptr1 + 2 = 0x7ffeefbff548, *(ptr1 +2 ) = 300
values after ptr1++ :
ptr1 = 0x7ffeefbff544,*ptr1 = 200,&ptr1 = 0x7ffeefbff528
values after ---ptr2:
ptr2 = 0x7ffeefbff544,*ptr2 = 200,&ptr2 = 0x7ffeefbff520
Pointers reset to original values:
ptr1 = 0x7ffeefbff540,ptr2 = 0x7ffeefbff548
subtracting one pointer from another:
ptr2 = 0x7ffeefbff548 ,ptr1 = 0x7ffeefbff540 ,ptr2 -ptr1 = 2
subtracting an int from a pointer:
Program ended with exit code: 0