C将二维数组传递给函数,打印结果

C passing 2D array to function, printing results

我试图通过将二维数组传递给函数来打印它,但我得到了奇怪的结果。这是我的代码。

#include <stdio.h>

int main()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    printArray(b);
    return 0;
}

void printArray(int (*ptr)[3])
{
    int i, j;
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 3; j++)
        {
            printf("%d\t", *((*ptr+i)+j));
        }
        printf("\n");
    }
}

然而,输出是

1  2   3

2  3   4

我认为这与我的 'j' 变量有关,但我似乎无法查明它。请帮忙

您需要先将 i 乘以 3,然后再添加 j ...

printf("%d\t", *((*ptr+(i*3))+j));

您需要在使用解引用运算符之前应用加法运算符。您需要使用括号,因为解引用运算符 (*) 的优先级高于加法运算符 (+).

所以,这个

printf("%d\t", *((*ptr+i)+j));

应该是

printf("%d\t", *((*(ptr+i))+j));

或更好

printf("%d\t", ptr[i][j]);

此外,您需要将函数 printArray 移到 main 之前,或者在 main 之前提供一个函数原型,例如:

void printArray(int (*ptr)[3]);

放弃索引转而使用指针,假设矩阵按行存储(通常是这种情况):

#include <stdio.h>

void printArray(int *);

int main()
{
 int b[2][3] = {{1,2,3},{4,5,6}};
 printArray((int*)b);
 return 0;
}

void printArray(int *ptr)
{
int i, j;
 for(i = 0; i < 2; i++)
 {
    for(j = 0; j < 3; j++)
    {
     printf("%d\t", *ptr++);
    }
  printf("\n");
 }
}

输出:

1   2   3   
4   5   6

printArray 可以接受 nb_column nb_line 参数并处理各种二维数组

#include <stdio.h> 

static void printArray(int *ptr,  int nb_columns, int nb_lines) 
{ 
    int i, j; 
    for(i = 0; i < nb_lines; i++) 
    { 
        for(j = 0; j < nb_columns; j++) 
        { 
            printf("%d\t", *(ptr++)); 
        } 
        printf("\n"); 
    } 
} 
int main() 
{ 
    int b[2][3] = {{1,2,3},{4,5,6}}; 
    printArray((int *)b, 3, 2); 
    return 0; 
}