C 如果数组的维度变量是通过main中的stdin输入的,那么如何在其他函数定义中使用它们?

C 如果数组的维度变量是通过main中的stdin输入的,那么如何在其他函数定义中使用它们?,c,arrays,C,Arrays,如果我们在main()外部全局声明数组A[A][b],而在main内部全局声明数组,那么我们需要A和b的值作为 scanf("Input values of a and b %d %d", &a,&b) 但是这个a和b被其他函数定义所使用,它会给出分段错误你的问题不是很清楚,但是听起来你想要一个数组,它的维数由用户在运行时指定。在c中执行此操作的最佳方法是malloc指针: int* A = malloc(a*b*sizeof(int)); A现在指向一个包含A*b元素的数组

如果我们在
main()
外部全局声明数组
A[A][b]
,而在main内部全局声明数组,那么我们需要
A
b
的值作为

scanf("Input values of a and b %d %d", &a,&b)

但是这个a和b被其他函数定义所使用,它会给出分段错误

你的问题不是很清楚,但是听起来你想要一个数组,它的维数由用户在运行时指定。在c中执行此操作的最佳方法是malloc指针:

int* A = malloc(a*b*sizeof(int));

A现在指向一个包含A*b元素的数组,您可以将其视为二维数组。

在要为维度A和b的数组A分配空间的代码中,请使用:

int (*A)[b] = malloc(a * sizeof *A);
它将A定义为指向
b
元素(
int
元素)的行(数组)的指针,并为
A
这样的行(因此
A
b
int
对象,因此
A*b
int
对象)分配空间

在要接收此数组的函数中,按以下方式声明函数:

void foo(size_t a, size_t b, int (*A)[b])
{
    …
}
也就是说,foo的参数是大小
a
、大小
b
、以及指向
b
int
对象行的指针

按如下方式调用函数:

foo(a, b, A);
以正常方式使用
A
的元素:

…A[i][j]…

要做到这一点,您必须动态分配内存。查看
malloc
free
。但即使如此,我如何在其他函数中使用m的值,比如上面代码中的矩阵乘法。就像我在主printf中所做的那样(“输入第一个矩阵的行数和列数\n”);scanf(“%d%d”,&m,&n);第一个=malloc(msizeof(int));对于(i=0;i)要将其视为二维数组,而不是使用
int*a
,请使用
int(*a)[b]=malloc(a*sizeof*a);
@user2079986:创建指向指针的指针,这是不必要的,通常需要访问数组以包含额外的指针查找,这通常较慢。为整个数组分配足够的空间并通过指向数组的指针访问它通常更快,而且一旦ons是编写的,更直观。是否可以用我添加的代码来解释它,我将输入m和n,这是数组的维数,然后在main()中为它分配内存.然后我在main之外的函数中的循环中使用了m,如何使m在其他函数中可访问。即使我只使用指针*a而不是**A@user2079986:使用全局变量通常是不好的做法。您可以简单地传递指向线程的指针以及已经传递的其他数据。而不是传递结构that只包含行和列信息,传递一个包含线程需要的所有信息的结构,包括指向矩阵的指针。但是,由于该结构需要提前声明,您可能需要在结构中将其设置为
void*
,然后将其强制转换为
int(*)[b]
线程中的函数内部。