谁错了,这本书还是我? (C二维数组)

时间:2014-10-08 20:03:25

标签: c arrays

我读了一本关于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;
}

1 个答案:

答案 0 :(得分:0)

你错了,因为:

pint = p;

是一个错误。你的编译器至少应该对此发出警告。代码应该是:

pint = *p;

你的循环结构比书的结构难以理解,你不会在数字之间留一个空格。

您好像在询问从int arr[5][2]int arr[4][2]的变化。原来没有错。您不必使用您声明的数组的每个元素。这本书有一个包含5行的数组,但只使用了4行,这很好。