【发布时间】:2013-11-14 13:27:19
【问题描述】:
首先,我不是 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;
}
我发现代码有点奇怪,因为我期待more similar to this 对我来说似乎更清楚。无论如何,我想知道以下几点:
-
malloc(sizeof(long int) * numberOfCities * numberOfCities + sizeof(long int *) * numberOfCities)行表示他们正在为数据项和指向每一行的指针分配内存? -
matrix[i] = (long int*) (matrix + numberOfCities) + i * numberOfCities到底是什么意思?我真的不明白他们想要做什么。 - 有没有更直接的方法在 C 中为二维数组分配内存,或者这是正确的方法?
【问题讨论】:
标签: c pointers memory-management multidimensional-array