我已经完成了这段代码(至少):
int** constructSparseMatrix(int totalRow, int totalCol, int totalEl) {
int** arr = new int*[totalEl];
//int x = 0;
for(int i = 0; i < totalEl; i++) {
arr[i] = new int[totalCol];
for (int k = 0; k < totalCol; k++) {
if(k == totalCol - 1) {
arr[i][totalCol - 1] = rand () % 101;
} else {
arr[i][k] = rand () % totalRow + 1;
}
}
}
return arr;
}
我试图通过使用指针而不是数组来访问内部元素,这是我的尝试:
int** constructSparseMatrix(int *totalRow, int *totalCol, int totalEl) {
int** arr = new int*[totalEl];
//int x = 0;
for(int i = 0; i < totalEl; i++) {
arr[i] = &totalCol [0];
for (int k = 0; k < *totalCol; k++) {
if(k == *totalCol - 1) {
arr[i][*totalCol - 1] = rand () % 101;
} else {
arr[i][k] = rand () % *totalRow + 1;
}
}
}
return arr;
}
但是当我以与工作函数相同的方式初始化时:
int** arr = constructSparseMatrix(5,3,totalEl);
然后我收到此错误:
argument of type "int" is incompatible with parameter of type "int *"
首先,我从数组到指针版本的转换是否正确编码?如果它是正确的,我如何初始化它以避免上述错误?
答案 0 :(得分:1)
首先,很明显这个语句在函数中
arr[i] = &totalCol [0];
错了。这没有意义。
您宣布了该功能
int** constructSparseMatrix(int *totalRow, int *totalCol, int totalEl);
将第一个和第二个参数作为指针但是试图在调用中将整数文字5和3传递给它
int** arr = constructSparseMatrix(5,3,totalEl);
你可以写例如
int totalRow = 5;
int totalCol = 3;
// ...
int** arr = constructSparseMatrix( &totalRow, &totalCol, totalEl );
但是我没有看到将这些参数声明为指针的意义,因为它们实际上是函数中的常量,它们不会被更改。
变量名称使读者感到困惑。例如,我希望在语句
中的函数中使用totalRow
int** arr = new int*[totalRow];
而不是totalEl
如果你想在函数中使用指针,那么函数可能看起来像
int** constructSparseMatrix( int totalRow, int totalCol, int totalEl )
{
int** arr = new int*[totalEl];
for ( int **p = arr; p < arr + totalEl; ++p )
{
*p = new int[totalCol];
for ( int *q = *p; q < *p + totalCol; ++q )
{
if ( q == *p + totalCol - 1 )
{
*q = rand () % 101;
}
else
{
*q = rand () % totalRow + 1;
}
}
}
return arr;
}
答案 1 :(得分:0)
我认为您将常量5和3作为参数传递,从而导致此错误。 你不能通过引用传递常数值。尝试通过将它们存储在变量中来传递5和3。