我有这个函数来指定一个值
void asignaMatrizCostos(int n){
int i, j;
if (n == 4){
for (i = 1; i <= 4; i++)
for (j = 1; j <= 4; j++) {
*(GLOBAL_mC++) = (i == j ? 0.0 : (double)(10 * i) + j);
}
}
}
另一个打印它的功能
void imprimeCostos(int n){
int i, j;
for (i = 0; i < n; i++){
for (j = 0; j < n; j++)
cout << ' ' << (*GLOBAL_mC++);
cout << endl;
}
}
}
这是我的主要
int main_ciclos(int argc, char** argv){
int n = 4;
GLOBAL_mC = (double*) malloc( n * n * sizeof(double));
asignaMatrizCostos(n);
int p[] = {3,1,2,0};
double res = 0; // costo(p, n);
imprimeCostos(n);
}
但是在输出中我得到了这个
它应该是一个带有双精度的二维数组
答案 0 :(得分:1)
GLOBAL_mC = (double*) malloc( n * n * sizeof(double));
doSomethingWith(GLOBAL_mC++);
您需要考虑在这两个语句之后设置GLOBAL_mC
的内容,这基本上就是您在代码中所做的事情。
提示:它不再是 数组的开头。
您需要做的是修改代码,使其根本不更改变量。例如,可以通过以下方式完成:
void asignaMatrizCostos(int n) {
double *ptr = GLOBAL_mC;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
*(ptr++) = (i == j) ? 0.0 : 10.0 * i + j;
}
}
}
您会注意到我还使用索引1..n
而非0..(n-1)
修复了您的问题。您可能需要根据需要调整加载到矩阵中的值。