下面的程序想实现数组的手动输入和以指针形式输出,不知道错在哪里,请各位高手指教!

2025-05-17 05:46:56
推荐回答(2个)
回答1:

# include 
int main(void)

    int i, j, m, n, a[100][100]; 
    printf("please input the two-dimensional of rows and columns: "); 
    scanf("%d %d", &m, &n); 
    printf("please input the two-dimensional of array elements: "); 
    for (i = 0; i < m; ++i)   
    {          
               for (j = 0; j < n; ++j)        
               {                 
                                 scanf("%d", &a[i][j]);        
               } 
    } 
    
    printf("\n"); 
    int *p; 
    p = a[0]; 
    for (; p < a[0] + m*100; ++p) //注意指针范围    
    {             
                  if((p-a[0])%100                  printf("%4d", *p);  
                  if((p-a[0])%100==n)   
                  printf("\n");
    } 
    printf("\n"); 
    return 0;
}

注释部分有改动,测试结果:

出现这个问题的主要原因是因为你申请的数组是100*100的,这些是按行存储的;而你输入的m*n数组是在大数组的左上角,不是连续的空间,所以你按照连续空间访问肯定是有问题的。得用上面的取余方式访问。

回答2:

问题出在输出部分:p=a[0];,p是指向整型数据的,而a[0]是指向100个单元的整型数值的(a数值的第0行),建议输出部分这样写:
for ( i=0;i for ( j=0,p=a[i][0];j printf("%d ",*p);