对指针可以进行赋值、求值或取值、取指针的地址、将一个指针加上一个整数、增加指针的值、求差值的操作。请参看以下代码展示了几种情形:
#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;
}