我有一个关于Arduino里,二维数组作为函数参数的问题
代码如下:
char tastatur[3][3] = {
{'a','c','1'},
{'g','8','5'},
{'q','Q','s'}
};
void ausgabe(char *tas,int hangshu,int lieshu);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
ausgabe(tastatur,3,3);
}
void ausgabe(char *tas,int hangshu,int lieshu){
for(int i = 0;i < hangshu;i++)
{
for(int j = 0;j < lieshu;j++)
{
Serial.println(tas[i][j]);
delay(1000);
}
}
}
编译后报了如下错误:
Compilation error: cannot convert 'char ()[3]' to 'char' for argument '1' to 'void ausgabe(char*, int, int)'
具体报错信息如下:
C:\Users\91274\AppData\Local\Temp\.arduinoIDE-unsaved2023515-5160-1inuzg1.r527\sketch_jun15a\sketch_jun15a.ino: In function 'void loop()':
C:\Users\91274\AppData\Local\Temp\.arduinoIDE-unsaved2023515-5160-1inuzg1.r527\sketch_jun15a\sketch_jun15a.ino:16:23: error: cannot convert 'char (*)[3]' to 'char*' for argument '1' to 'void ausgabe(char*, int, int)'
ausgabe(tastatur,3,3);
^
C:\Users\91274\AppData\Local\Temp\.arduinoIDE-unsaved2023515-5160-1inuzg1.r527\sketch_jun15a\sketch_jun15a.ino: In function 'void ausgabe(char*, int, int)':
C:\Users\91274\AppData\Local\Temp\.arduinoIDE-unsaved2023515-5160-1inuzg1.r527\sketch_jun15a\sketch_jun15a.ino:25:30: error: invalid types 'char[int]' for array subscript
Serial.println(tas[i][j]);
^
exit status 1
Compilation error: cannot convert 'char (*)[3]' to 'char*' for argument '1' to 'void ausgabe(char*, int, int)'
如果把函数ausgabe()里面的for循环直接放在loop里是没有问题的。
就想知道如果二维数组作为函数参数需要注意些什么,为什么这里会报错。
#include <stdio.h>
#define ROW 2 //二维数组的行数
#define COL 2 //二维数组的列数
//4个版本的求和函数
//方式一:数组形式
int TwoDimArraySum1(int twoDimAr[][COL], int row, int col);
//方式二:指针形式,prArray是一个指向包含COL个int的数组的指针
int TwoDimArraySum2(int (*prArray)[COL], int row, int col);
//方式三:指针形式,pr是一个指向int的指针
int TwoDimArraySum3(int *pr, int row, int col);
//方式四:变长数组(C99开始支持)
int TwoDimArraySum4(int row, int col, int twoDimAr[row][col]);
int main(void)
{
int twoDimArray[ROW][COL] = {{-2, 5}, {4, 9}};
int result;
//方式一
result = TwoDimArraySum1(twoDimArray, ROW, COL);
printf("Sum1函数结果:%d\n", result);
//方式二
result = TwoDimArraySum2(twoDimArray, ROW, COL);
printf("Sum2函数结果:%d\n", result);
//方式三
result = TwoDimArraySum3(twoDimArray[0], ROW, COL);
printf("Sum3函数结果:%d\n", result);
//方式四
result = TwoDimArraySum4(ROW, COL, twoDimArray);
printf("Sum4函数结果:%d\n", result);
return 0;
}
int TwoDimArraySum1(int twoDimAr[][COL], int row, int col)
{
int i, j;
int result = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
//下面两种寻址方式都行
result += twoDimAr[i][j];
// result += *(*(twoDimAr + i) + j);
}
}
return result;
}
int TwoDimArraySum2(int (*prArray)[COL], int row, int col)
{
int i, j;
int result = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
//下面两种寻址方式都行
result += prArray[i][j];
// result += *(*(prArray + i) + j);
}
}
return result;
}
int TwoDimArraySum3(int *pr, int row, int col)
{
int i, j;
int result = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
//下面两种寻址方式都行
result += pr[i*col + j];
// result += *(pr + i*col + j);
}
}
return result;
}
int TwoDimArraySum4(int row, int col, int twoDimAr[row][col])
{
int i, j;
int result = 0;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
//下面两种寻址方式都行
result += twoDimAr[i][j];
// result += *(*(twoDimAr+ i) + j);
}
}
return result;
}