对指针可以进行赋值、求值或取值、取指针的地址、将一个指针加上一个整数、增加指针的值、求差值的操作。请参看以下代码展示了几种情形:
#include<stdio.h>
int main(void)
{
int urn[5]={100,200,300,400,500};
int *p1,*p2,*p3;
p1=urn; //把一个地址赋给指针
p2=&urn[2]; //取得urn[2]的地址,并赋给一个指针
printf("数组各个元素的值和地址:\n");
for(int i=0;i<5;i++)
{
printf("urn[%d]=%d &urn[%d]=%p;\n",i,urn[i],i,&urn[i]);
}
printf("\n指针指向的地址,指针指向地址的值,指针的地址\n");
printf("p1=%p ,*p1=%d ,&p1=%p",p1,*p1,&p1);
printf("\n指针加上整数的效果(指针+int!=指针,指针+int==地址):\n");
printf("p1+4=%p,*(p1+4)=%d",p1+4,*(p1+4));
//printf("&(p1+4)=%p",&(p1+4))//error:p1+4是一个地址,不能对其进行取地址操作,但可以将p1+4赋给一个指针
p1++;//p++==p1+1。p1+1是一个地址,将p1+1赋给p1
printf("\n在p1++以后:\np1=%p ,*p1=%d ,&p1=%p\n",p1,*p1,&p1);
//求两个指针差值
printf("\np2=%p,p1=%p,p2-p1=%d\n",p2,p1,p2-p1);
getchar();
return 0;
}