zhliao2

风雨兼程,一路向北-------fpga (Keep a quiet heart study)
指向多维数组的指针变量(int *p 和 int ( *p )[ N ])

int a[ 4 ];

a有四个元素,每个元素为整型

 

int ( *p )[ 4 ];   //4为二维是在的后面的一个数

*p有4个元素,每个元素为整型,也就是说p所指的的对象有4个整型元素的数组即p是一维数组的指针

( p只是指向一个包含有4个元素的一维数组,p的值就是该一维数组的起始地址 )

 

程序数组为int a[3][4] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 };

经常搞混淆int *p和int ( *p )[ 4 ]可参考以下程序

 

# include <stdio.h>

int main ( void )
{
    int a[3][4] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 };
    int *p;

    for ( p = a[ 0 ]; p < a[ 0 ] + 12; p ++ )
    {
        if ( (p - a[ 0 ] ) % 4 == 0 )   //每输出四个元素换行,注意( p - a[ 0 ] )的括号别忘了添加,否则会报错
            printf ( "\n" );
        printf ( "%4d", *p );
    }
    
    printf ( "\n" );
}

结果:

 

# include <stdio.h>

int main ( void )
{
    int a[][4] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 };
    int ( *p )[ 4 ], i, j; //int ( *p )[ 4 ]表示p是一个指针变量,它指向4个整形元素的一维数组
    p = a;   //二维数组的首地址赋给p
    scanf ( "i = %d, j = %d", &i, &j );
    printf ( "a[ %d, %d ]  = %d\n", i, j, *( *( p + i ) + j ) );
}

结果:

posted on 2012-07-15 14:14  zhliao  阅读(598)  评论(0)    收藏  举报