Arrays 如何打印二维阵列?

Arrays 如何打印二维阵列?,arrays,c,Arrays,C,我有两个功能。一个函数创建给定数字的乘法表,另一个函数输出数组。下面是我的代码: 下面是错误(第18行): 如何修复此错误并打印阵列?而且,我不知道如何在每行之后打印新行 #include "multiplication.h" #include <stdio.h> int arr[][]; void mulitpication(int num){ /* initialize array and build*/ int arr[num][num];

我有两个功能。一个函数创建给定数字的乘法表,另一个函数输出数组。下面是我的代码:

下面是错误(第18行):

如何修复此错误并打印阵列?而且,我不知道如何在每行之后打印新行

#include "multiplication.h"
#include <stdio.h> 
int arr[][];
void mulitpication(int num){
    /* initialize array and build*/
    int arr[num][num];
    for(int i=0; i<num;i++){
        for(int j=0;j<num;j++){
            arr[i][j]= (i+1)*(j+1);
        }
    }
}
    
void print(int arr[][]){
    /* print the arr*/
    int i;
    for(i=0;i<sizeof(arr);i++){
        for(int j=0;j<sizeof(arr);j++){
            printf("%d ",arr[i][j])**(line 18)**;
        }
            
    }
}
#包括“multiply.h”
#包括
int arr[][];
无效复制(整数){
/*初始化数组并生成*/
int arr[num][num];

对于(int i=0;i您需要在
main()
中声明数组,以便将其传递给这两个函数

当数组作为函数参数传递时,它只传递一个指针。您需要传递数组维度,不能使用
sizeof
确定它们

要在新行上获取表中的每一行,请在打印行的循环后面放置
printf(“\n”);

#include <stdio.h> 

void multiplication(int num, arr[num][num]){
    /* initialize array and build*/
    for(int i=0; i<num;i++){
        for(int j=0;j<num;j++){
            arr[i][j]= (i+1)*(j+1);
        }
    }
}
    
void print(int num, int arr[num][num]){
    /* print the arr*/
    int i;
    for(i=0;i<num;i++){
        for(int j=0;j<num;j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}

int main(void) {
    int size;
    printf("How big is the multiplication table? ");
    scanf("%d", &size);
    int arr[size][size];
    multiplication(size, arr);
    print(size, arr);
    
    return 0;
}
#包括
无效乘法(int-num,arr[num][num]){
/*初始化数组并生成*/

对于(int i=0;i如果使用C99或更高版本的VLA支持,请将所需的尺寸传递到打印功能中

// void print(int arr[][]){
void print(size_t rows, size_t cols, int arr[row][col]){
    size_t r,c;
    for (size_t r = 0; r < rows; r++) {
      for (size_t c = 0; c < cols; c++) {
        printf("%d ",arr[r][c]);
      }
      printf("\n");
    }
}
//无效打印(int arr[]{
无效打印(大小行、大小列、整数列[行][列]){
尺寸r,c;
对于(大小r=0;r
将代码作为代码块中的文本而不是图像发布,以便人们可以复制和粘贴到答案中。
arr
变量是
multiply()
函数的局部变量。它不能从
print()
函数访问。您应该在
main()中声明数组
。然后您可以将其作为参数传递给每个函数。您不能使用
sizeof
获取数组参数的大小。\See Ok,我删除了图片并发布了代码。但是,在打印时如何在每行之后添加新行。理想情况下,如果数字为4,它应该打印{1,2,3,4}、{2,4,6,8}、{3,6,9,12},{4,8,12,16}}作为一个乘法表@BarmarThanks@chux,顺便问一下,C99是什么意思?@Justin是1999年推出的C版本。@Justin谢谢@Barmar,我真的从你那里学到了很多。如果你不介意我问的话,sizeof返回多少?它返回其参数的大小。当数组衰减为指针时,它返回th指针的大小(通常为4或8个字节),而不是它指向的数组的大小。
// void print(int arr[][]){
void print(size_t rows, size_t cols, int arr[row][col]){
    size_t r,c;
    for (size_t r = 0; r < rows; r++) {
      for (size_t c = 0; c < cols; c++) {
        printf("%d ",arr[r][c]);
      }
      printf("\n");
    }
}