gpt4 book ai didi

c - 在 C 中将静态分配的二维数组作为函数参数传递

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:29 25 4
gpt4 key购买 nike

考虑这段代码:


#include <stdio.h>
#define N 5
void printMatrix(int (*matrix)[N],int n)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d",matrix[i][j]);
printf("\n");
}
}
int main()
{
int R[N][N]={{1,2,3},{4,5,6},{7,8,9}};
printMatrix(R,3);
}

这按预期工作正常。
现在,我想在一个单独的源文件中编写处理二维矩阵的函数,并在需要的地方链接它们。
但后来我遇到了一个问题,如函数 printMatrixmatrix 指向的 int 数组的大小(即 N ) 在编译时是必需的。因此,当大小不同时,我的函数在其他情况下将不起作用。

那么,我该如何处理呢?
动态数组是一种解决方案,但我想知道它是否可以用静态数组来完成。

最佳答案

如果在编译时不知道两个大小,则不能使用内置的二维数组类型。内置二维数组必须至少具有编译时已知的两种大小之一。

如果两个大小都是运行时值,那么您别无选择,只能使用二维数组的“手动”实现,例如指向数组的指针数组。在那种情况下,函数声明可能如下所示(两种替代的等效形式)

void printMatrix(int *const *matrix, int n, int m);
void printMatrix(int *const matrix[], int n, int m);

要访问数组元素,您仍然可以使用“传统”语法

matrix[i][j]

数组本身将按如下方式创建(一个简单的例子)

int row0[] = { 1, 2, 3 };
int row1[] = { 4, 5, 6 };

int *matrix[2];
matrix[0] = row0;
matrix[1] = row1;

printMatrix(matrix, 2, 3);

但是如果您已经将矩阵实现为内置二维数组

int matrix[2][3] = { ... };

然后为了能够将它传递给上面的函数,你可以通过使用一个额外的临时“行指针”数组将它“转换”成上面的形式

int *rows[2];
rows[0] = matrix[0];
rows[1] = matrix[1];

printMatrix(rows, 2, 3);

关于c - 在 C 中将静态分配的二维数组作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com