如何将多维数组传递给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 ++中不起作用?需要做出哪些改变?
3 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
#include<stdio.h>void print(int arr[][4], int s1, int s2) { int i, j; printf("\n"); for(i = 0; i<s1; i++) { for(j = 0; j<s2; j++) { printf("%d, ", *((arr+i)+j)); } } printf("\n");}int main() { int a[4][4] = {{0}}; print(a,4,4);}
这将工作,我的工作意味着编译。@AndreyT解释了为什么你的版本不能正常工作。
这是你应该传递二维数组的方法。
为清楚起见,您还可以在函数声明中指定两个大小:
#include<stdio.h>void print(int arr[4][4], int s1, int s2) { int i, j; printf("\n"); for(i = 0; i<s1; i++) { for(j = 0; j<s2; j++) { printf("%d, ", *((arr+i)+j)); } } printf("\n");}int main() { int a[4][4] = {{0}}; print(a,4,4);}
两者都有效。
您还应该更改*((arr+i)+j)
为a[i][j]
(最好)或者*(*(arr+i)+j)
如果您打算访问j
行的第th个元素i
。
- 3 回答
- 0 关注
- 528 浏览
添加回答
举报
0/150
提交
取消