非常基本的问题。技巧是将数组定义为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
答案 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语句。