标签:
// ptr_ops --指针 操作
#include<stdio.h>
int main(void)
{
int urn[5] = {100,200,300,400,500};
int *ptr1,*ptr2,*ptr3;
ptr1 = urn; //把第个地址赋给指针
ptr2 = &urn[2]; //同上
printf("pointer value ,dereferenced pointer ,pointer address:/n"); //取得指针到值并去取得指针到地址
printf("ptr1 = %p , *ptr1 = %d, &ptr = %p /n ", ptr1, *ptr1, &ptr1); //ptr1 = %p ,urn数组首地址, 100 ,指针变量自身的门牌号码,他家里存的是 数组urn 的首地址
ptr3 = ptr1 + 4; //指针加法
printf("/nadding an int to a pointer :/n");
printf("ptr1 + 4 = %p, *(ptr1 + 3) = %d /n ", ptr1 + 4, *(ptr1 + 3) ); // 因为一个地址代表一个字节,一个字节八位,参考博客 32位机器上的图片。
// 这里是指 &urn[4]的地址,应该与第一个相差4*4即 16个字节, *(ptr1+3)=400
ptr1++; //递增指针
printf("/nvalues after ptr1++/n");
printf("ptr1 = %p , *ptr1 = %d, &ptr1 = %p /n", ptr1, *ptr1, &ptr1); // 数组第二个元素地址 , 200 , 指针变量自身的门牌号码,他家里存的是 数组urn 的首地址
ptr2--; //递减指针
printf("/n values after --ptr2/n");
printf("ptr2 = %p,*ptr2 = %d,&ptr2 = %p/n",ptr2,*ptr2,&ptr2); // 首元素地址+4 , 200 , ptr2指针变量自身的门牌号码
--ptr1; //恢复初始值
++ptr2; //恢复初始值
printf("/npointer 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 = %d/n",ptr2,ptr1,ptr2 - ptr1); //指针减法
printf("/nsubtracting an int from a pointer/n");
printf("ptr3 = %p,ptr3 - 2 = %p/n",ptr3,ptr3 - 2);
return 0;
}
结果:
:
仔细看看,就懂了,不是很难的!!!!!
标签:
原文地址:http://www.cnblogs.com/shengruxiahua/p/4883731.html