我读了一本关于C的书,有一个关于指向二维数组并打印数组值的例子。
书中的例子是:
main(){
int s[5][2] = {
{ 1234, 56 },
{ 1212, 33 },
{ 1434, 80 },
{ 1312, 78 }
} ;
int ( *p )[2] ;
int i, j, *pint ;
for ( i = 0 ; i <= 3 ; i++ )
{
p = &s[i] ;
pint = p ;
printf ( "\n" ) ;
for ( j = 0 ; j <= 1 ; j++ )
printf ( "%d ", *( pint + j ) ) ;
}
}
我为这段代码制作了我的版本,我观察到他在书代码中声明了一个[5][2]
数组,并且我声明了一个[4][2]
数组,我们得到了相同的结果。
这是我的代码:
#include <stdio.h>
int main(){
int arr[4][2]={0,1,2,3,4,5,6,7};
int (*p)[2];
int i=0,x=0,*pint;
while(i<=3){
x=0;
p=&arr[i];
pint=p;
i++;
while(x<2){
printf("%d",*(pint+x));
x++;
}
printf("\n");
}
return 0;
}
答案 0 :(得分:0)
你错了,因为:
pint = p;
是一个错误。你的编译器至少应该对此发出警告。代码应该是:
pint = *p;
你的循环结构比书的结构难以理解,你不会在数字之间留一个空格。
您好像在询问从int arr[5][2]
到int arr[4][2]
的变化。原来没有错。您不必使用您声明的数组的每个元素。这本书有一个包含5行的数组,但只使用了4行,这很好。