指针操作---------赋值,解引用,取值,指针与整数相加,递增指针,指针减去一整数,递减指针,指针求差,比较

匿名 (未验证) 提交于 2019-12-03 00:18:01

指针操作---------赋值,解引用,取值,指针与整数相加,递增指针,指针减去一整数,递减指针,指针求差,比较


#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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!