使用C中的指针打印数组的值

时间:2017-02-15 23:58:24

标签: c multidimensional-array

非常基本的问题。技巧是将数组定义为2D数组。

int main(){
    int mat[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int index;
    for (index = 0; index < 9; index++){
        // only change code below this line
        // print the value at this index using pointer arithmetic

        //below is my code
        printf("%p\n", *(&mat + index));
    }
    return 0;
}

我是指针新手。根据我的理解,&#39;&amp;&#39;指针指向地址,*指针指向该地址中的值,对吧?

输出应该是单独的行上的整数1-9

1 个答案:

答案 0 :(得分:0)

看来你的意思是以下

#include <stdio.h>

#define N   3

int main(void) 
{
    int mat[N][N] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

    for ( int i = 0; i < N * N; i++ )
    {
        printf( "%d ",  *( *( mat + i / N ) + i % N ) );
        if ( ( i + 1 ) % N == 0 ) printf( "\n" );
    }

    return 0;
}

输出

1 2 3 
4 5 6 
7 8 9 

另一种方法是将二维数组重新解释为一维数组。

#include <stdio.h>

#define N   3

int main(void) 
{
    int mat[N][N] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

    for ( int i = 0; i < N * N; i++ )
    {
        printf( "%d ",  *( ( int * )mat + i ) );
        if ( ( i + 1 ) % N == 0 ) printf( "\n" );
    }

    return 0;
}

如果需要将所有整数输出到一行,则只需删除if语句。