我正在使用C++构建一个数组,然后将其传递到Python(类似于:在C++中嵌入Python / Numpy)。我对C++不太熟悉, 对代码的一些细节感到困惑。我希望能够理解这段代码的工作原理,因为我需要对其进行更改。所以我的问题是:这种初始化数组的方法是什么?
const int SIZE{ 10 };
double(*c_arr)[SIZE]{ new double[SIZE][SIZE] };
记录一下,我通过调用以下代码使其成为一个矩形数组:
const int numberRows = 5000;
const int numberColumns = 500;
double(*c_arr)[numberColumns]{ new double[numberRows][numberColumns] };
我填充数组:
// fill the array from a file
std::string line;
int row = 0;
int column = 0;
while (std::getline(dataFile, line)) {
std::stringstream lineStream(line);
std::string cell;
while (std::getline(lineStream, cell, '\t')) {
c_arr[row][column] = std::stod(cell);
column++;
}
row++;
column = 0;
if (row == numberRows) {
break;
}
}
我仍然不理解 double(*c_arr)
是什么意思。每当我尝试用不同的方式来初始化这个数组时,都会出现错误。例如:double *c_arr[numberRows][numberColumns];
当我尝试填充数组 c_arr[row][column] = std::stod(cell);
时,就会出现错误。如果我将初始化更改为:double c_arr[numberRows][numberColumns];
,那么在运行时就会出现分段错误。我最终想要实现一个返回指向数组的指针的函数;像这样:
double *load_data(int rows, int columns) {
double(*c_arr)[columns]{ new double[rows][columns] };
//fill array here
return (c_arr)
}
当我构造这样一个函数时,在第二次出现
columns
变量时出现错误:expression must have a constant value -- the value of parameter "columns" cannot be used as a constant
。我不太清楚如何解决这个问题,但我希望如果我能理解数组初始化,我就能正确地构造load_data
函数。
int (*p)[5]
)与指针数组(int *p[5]
)是不同的。我认为这是你困惑的根源。 - chip
)之前写了一些东西,在名称之后写了一些东西,而且顺序并不容易理解。有些情况下需要使用括号来强制所需的类型,就像我上面做的示例一样。int (*p)[5]
表示 p 是一个指向 5 个整数数组的指针。而int *p[5]
则被解析为int *(p[5])
,表示一个包含 5 个指向整数的指针的数组。 - chi