指针的基本运算

指针的基本运算

对指针可以进行赋值求值取值取指针的地址将一个指针加上一个整数增加指针的值求差值的操作。请参看以下代码展示了几种情形:

#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 ;
}

你可能感兴趣的:(指针的基本运算)