如何将多维数组传递给C和C ++中的函数

如何将多维数组传递给C和C ++中的函数

#include<stdio.h>void print(int *arr[], int s1, int s2) {
    int i, j;
    for(i = 0; i<s1; i++)
        for(j = 0; j<s2; j++)
            printf("%d, ", *((arr+i)+j));}int main() {
    int a[4][4] = {{0}};
    print(a,4,4);}

这适用于C,但不适用于C ++。

错误:

cannot convert `int (*)[4]' to `int**' for argument `1' to 
`void print(int**, int, int)'

为什么它在C ++中不起作用?需要做出哪些改变?


HUX布斯
浏览 529回答 3
3回答

慕姐4208626

#include<stdio.h>void&nbsp;print(int&nbsp;arr[][4],&nbsp;int&nbsp;s1,&nbsp;int&nbsp;s2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j; &nbsp;&nbsp;&nbsp;&nbsp;printf("\n"); &nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i<s1;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0;&nbsp;j<s2;&nbsp;j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d,&nbsp;",&nbsp;*((arr+i)+j)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;printf("\n");}int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a[4][4]&nbsp;=&nbsp;{{0}}; &nbsp;&nbsp;&nbsp;&nbsp;print(a,4,4);}这将工作,我的工作意味着编译。@AndreyT解释了为什么你的版本不能正常工作。这是你应该传递二维数组的方法。为清楚起见,您还可以在函数声明中指定两个大小:#include<stdio.h>void&nbsp;print(int&nbsp;arr[4][4],&nbsp;int&nbsp;s1,&nbsp;int&nbsp;s2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j; &nbsp;&nbsp;&nbsp;&nbsp;printf("\n"); &nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i<s1;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0;&nbsp;j<s2;&nbsp;j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d,&nbsp;",&nbsp;*((arr+i)+j)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;printf("\n");}int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a[4][4]&nbsp;=&nbsp;{{0}}; &nbsp;&nbsp;&nbsp;&nbsp;print(a,4,4);}两者都有效。您还应该更改*((arr+i)+j)为a[i][j](最好)或者*(*(arr+i)+j)如果您打算访问j行的第th个元素i。
打开App,查看更多内容
随时随地看视频慕课网APP