c - 将接收静态二维数组的函数转换为接收指针的函数

标签 c arrays pointers multidimensional-array arguments

我有一个在静态内存中编程的代码(接收静态二维数组的函数)(静态代码无法编译,二维数组没有维度)我需要将它转换为带有指针的动态内存(接收静态二维数组的函数) 指针)。

静态内存代码为:

void mas_corto(unsigned int c[][], unsigned int a[][], int P[][], unsigned int nNodos)
{
int i,j,k;
for (i = 0; i < nNodos; i++){
    for(j=0; j < nNodos; j++){
        // Inicializamos con el coste de los caminos directos
        A[i][j] = C[i][j]; P[i][j] = -1;
    }
}
for (k = 0; k < nNodos; k++)
    for (i = 0; i < nNodos; i++)
        for (j=0; j< nNodos; j++)
            if (A[i][k]+A[k][j] < A[i][j])
            {
                A[i][j] = A[i][k] + A[k][j];
                P[i][j] = k;
            }
}

void camino (int P[][], int i, int j)
{
int k;
if ((k=P[i][j])== -1)
    return;
camino(i,k);
printf("%d",k);
camino(k,j);
}

#define boolean int
void warshall (boolean c[][], boolean a[][], unsigned int nNodos)
{
int i,j,k;
for (i = 0; i < nNodos; i++)
    for (j=0; j< nNodos; j++)
        A[i][j] = C[i][j];
    for (k = 0; k < nNodos; k++)
        for (i = 0; i < nNodos; i++)
            for (j=0; j< nNodos; j++)
                A[i][j] = A[i][j] || A[i][k] && A[k][j];
}

如您所见,函数接收静态 2D 静态数组,我需要将它们转换为 2D 指针,例如:

void mas_corto(unsigned int **C, unsigned int **A, int **P, unsigned int nNodos)
{
    // CODE TRANSLATED
}

void camino (int **P, int i, int j)
{
    // CODE TRANSLATED
}

#define boolean int
void warshall (boolean **C, boolean **A, unsigned int nNodos)
{
    // CODE TRANSLATED
}

但我不知道如何将静态函数中包含的代码转换为指针函数。知道我该如何实现吗? (我需要将静态函数内代码翻译成指针,换句话说,我需要在 //CODE TRANSLATED 出现的地方填充)

谢谢。

最佳答案

实际上您可以使用数组,因为您确实知道数组的大小并且 C 支持可变长度数组。

只需稍微改变参数的顺序,将大小放在第一位,您就可以在其余参数中使用它:

void mas_corto(unsigned int nNodos, unsigned int c[][nNodos], unsigned int a[][nNodos], int P[][nNodos]) { ... }

关于c - 将接收静态二维数组的函数转换为接收指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469253/

相关文章:

检查括号平衡的C程序

c++ - 将 strcpy() 与指向 cstring 的指针一起使用时出现段错误

c - 纯 C - 传递结构指针的引用

c - 为什么在头文件中使用 typedef 而不是只在 .c 中做所有事情

c - K&R 和 ANSI 函数输出之间的区别

c - libcurl (7.19,7) 在 OSX (10.6.8) 上因 _mdns_query_callback 而崩溃

java - 重复唯一的一对名称数组

c - 数组下标不是整数题

javascript - 使用 Underscore.js 合并/组合和求和数组条目

C++将带参数的函数指针传递给函数