我正在尝试将2D char数组传递给头文件中声明的函数。
//Proj1Aux.h
#ifndef PROJ1AUX_H
#define PROJ1AUX_H
void makeBoard(char (*myBoard)[10], int boardSize);
void printBoard(char (*myBoard)[10], int boardSize);
#endif
我定义了如下函数:
//Proj1Aux.cpp
#include <iostream>
#include "Proj1Aux.h"
using namespace std;
void makeBoard(char (*myBoard)[10], int boardSize)
{
//code
}
void printBoard(char (*myBoard)[10], int boardSize){
//code
}
然后在另一个.cpp文件的主函数中:
//Proj1.cpp
#include <iostream>
#include <cstdlib>
#include "Proj1Aux.cpp"
using namespace std;
int main(int argc, char* argv[]){
//code...
//more code...
char board[10][10];
makeBoard(board, boardSize);
printBoard(board, boardSize);
}
我是C ++的初学者,我对指针,甚至是头文件都没有把握。我尝试在没有任何指针的情况下传递2D数组,但是编译器给了我一个错误:
invalid conversion from 'const char*' to 'char'
所以我尝试输入上面列出的指针,我得到了同样的错误
我该怎么办?任何人都可以通过我的代码告诉我究竟出了什么问题吗?
答案 0 :(得分:1)
您的代码与自己不一致。
char board[10][10];
这表示电路板是一个二维阵列,10乘10。
makeBoard(board, boardSize);
这会将board
传递给makeBoard
,只有当makeBoard
的第一个参数与10 x 10 2D阵列兼容时才会有效。
void makeBoard(char (*myBoard)[10], int boardSize)
但是这表示makeBoard
的第一个参数是指向1D数组的指针。这与2D阵列完全不同 - 它们完全不兼容。数组与指向其第一个元素的指针兼容。因此,指向1D数组的指针有两个间接级别 - 指针将引导您进入1D数组,该数组衰减为指向第一个元素的指针。 2D数组具有一个间接级别 - 数组衰减为指向其第一个元素的指针。
那么,这是什么?参数是指向内容的指针,还是指向内容指针的指针?
为什么不使用std::vector
而不是数组?