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]
线程中的函数内部。