在没有指针的情况下,void类型函数如何向C中的局部变量返回值?

在没有指针的情况下,void类型函数如何向C中的局部变量返回值?,c,arrays,function,return,C,Arrays,Function,Return,下面是一个程序,用C语言读取数组并使用函数打印它: #include<stdio.h> void read_arr(int a[10][10],int row,int col) { int i,j; for(i=1;i<=row;i++) { for(j=1;j<=col;j++) { printf("\nEnter Element %d %d : ",i,j); sc

下面是一个程序,用C语言读取数组并使用函数打印它:

#include<stdio.h>
void read_arr(int a[10][10],int row,int col)
{
    int i,j;
    for(i=1;i<=row;i++)
    {
        for(j=1;j<=col;j++)
        {
            printf("\nEnter Element %d %d : ",i,j);
            scanf("%d",&a[i][j]);
        }
    }
}
void print_arr(int m[10][10],int row,int col)
{
    int i,j;
    for(i=1;i<=row;i++)
    {
        for(j=1;j<=col;j++)
        {
            printf("%d ",m[i][j]);
        }
        printf("\n");
    }
}
void main()
{
    int m1[10][10],row,col;
    printf("Enter number of rows :\n");
    scanf("%d",&row);
    printf("Enter number of colomns :\n");
    scanf("%d",&col);
    read_arr(m1,row,col);
    printf("\n");
    print_arr(m1,row,col);
}
由于我们将值输入到函数“read_arr”中的数组“a”,这些值是如何传递到“main”函数中的局部变量“m1”的,我们知道这一点,因为当我们将“m1”传递到函数“print_arr”时,输出正确地显示了输入的数组,因为我们没有从“read_arr”返回“a”


如果可能的话,您可以解释“m1”是如何获取值的,方法是解释控件在程序中的运行方式,参数是如何通过C中的值传递的,但数组会衰减为指向第一个元素的指针。所以被访问的内存是相同的,这就是元素发生变化的原因

您可以通过添加代码来验证这一点,将数组的值作为每个函数内的指针打印出来,如main中所示:


在C语言中,当参数衰减为指针时传递数组。每当数组作为参数传递给函数时,它们总是通过使用“按引用传递”机制来传递

不要忘记数组索引是基于零的。也就是说,一个由十个元素组成的数组的索引范围为0到9(含0到9)。注意:C的索引是从零开始的。对你来说,这是我见过的最好的问题之一。欢迎来到SO!m1是存储数据的存储器地址。您将数据写入该内存地址。然后将相同的内存地址传递给另一个函数。数据在内存中,m1指向的地方。将m1传递给函数时,不会传递整个数组,只传递一个值,即内存地址。
printf("the array is at %p\n", (void *) m1);