我遇到使用指针动态更改矩阵值的问题。
我有这些全局声明:
viewScope.jenarkReportEMail
然后我有一个功能来从用户那里获取输入来填充我想要的任何矩阵:
int row, col = 0;
float** matrixP;
float** matrixT;
float** matrixP_;
然后我有主要功能我正在接受输入并试图显示matrixP :
void TakeInput(float** matrix, float row, float col) {
// Initializing the number of rows for the matrix
matrix = new float*[row];
// Initializing the number of columns in a row for the matrix
for (int index = 0; index < row; ++index)
matrix[index] = new float[col];
// Populate the matrix with data
for (int rowIndex = 0; rowIndex < row; rowIndex++) {
for (int colIndex = 0; colIndex < col; colIndex++) {
cout << "Enter the" << rowIndex + 1 << "*" << colIndex + 1 << "entry";
cin >> matrix[rowIndex][colIndex];
}
}
// Showing the matrix data
for (int rowIndex = 0; rowIndex < row; rowIndex++) {
for (int colIndex = 0; colIndex < col; colIndex++) {
cout << matrix[rowIndex][colIndex] << "\t";
}
cout << endl;
}
}
现在我在这方面遇到了问题:
int main() {
// Take the first point input
cout << "Enter the row and column for your points matrix" << endl;
cout << "Enter the number of rows : "; cin >> row;
cout << "Enter the number of columns : "; cin >> col;
TakeInput(matrixP, row, col);
cout << "=============================================================" << endl;
// =============================================================
for (int rowIndex = 0; rowIndex < row; rowIndex++) {
for (int colIndex = 0; colIndex < col; colIndex++) {
cout << matrixP[rowIndex][colIndex] << "\t";
}
cout << endl;
}
return 0;
}
我得到了:
for (int rowIndex = 0; rowIndex < row; rowIndex++) {
for (int colIndex = 0; colIndex < col; colIndex++) {
cout << matrixP[rowIndex][colIndex] << "\t";
}
cout << endl;
}
请在这里帮助我指出我在这里做错了什么。 在此先感谢!
答案 0 :(得分:1)
您收到该错误的原因是您将矩阵传递为 “按值传递”未通过“引用”,因此请使用此
替换您的代码void TakeInput(float** &matrix, int row, int col)
row和col也应该是整数。
答案 1 :(得分:0)
很简单,您可以通过值将matrixP传递给TakeInput,即在TakeInput中编辑它的副本。这样做。
void TakeInput(float*** matrix, float row, float col) {
//use (*matrix) instead
//...
}
TakeInput(&matrixP, row, col);
指针在这个问题上与通常的注意事项没有什么不同。
编辑:
void TakeInput(float** &matrix, float row, float col) {
// Initializing the number of rows for the matrix
matrix = new float*[row];
// Initializing the number of columns in a row for the matrix
for (int index = 0; index < row; ++index)
matrix[index] = new float[col];
// Populate the matrix with data
for (int rowIndex = 0; rowIndex < row; rowIndex++) {
for (int colIndex = 0; colIndex < col; colIndex++) {
cout << "Enter the" << rowIndex + 1 << "*" << colIndex + 1 << "entry";
cin >> matrix[rowIndex][colIndex];
}
}