首先,我不是 C 编程方面的专家,我现在正在阅读一些遗留的 C 代码。在那里,我找到了以下用于初始化 2D 矩阵的函数:
long int **computeDistanceMatrix(void){
long int i;
long int j;
long int ** matrix;
matrix = malloc(sizeof(long int) * numberOfCities * numberOfCities +
sizeof(long int *) * numberOfCities);
if(matrix == NULL){
fprintf(stderr, "Out of memory, exit.");
exit(1);
}
for (i = 0; i < numberOfCities; i++){
matrix[i] = (long int*) (matrix + numberOfCities) + i * numberOfCities;
for (j = 0; j < numberOfCities; j++){
matrix[i][j] = distanceFunction(i, j);
}
}
return matrix;
}
我发现代码有点奇怪,因为我期待与此更相似的东西对我来说似乎更清楚。无论如何,我想知道以下几点:
- 这条线
malloc(sizeof(long int) * numberOfCities * numberOfCities + sizeof(long int *) * numberOfCities)
意味着他们正在为数据项和指向每一行的指针分配内存? - 究竟是什么意思
matrix[i] = (long int*) (matrix + numberOfCities) + i * numberOfCities
?我真的不明白他们想要做什么。 - 有没有更直接的方法来为 C 中的二维数组分配内存,或者这是正确的方法?