C语言中函数返回数组(一维和二维)

C语言中函数返回数组是很重要的一种应用,有时候在程序中调用函数返回数组可以更容易的实现我们想要的某些操作,比如一次返回多个值,这篇文章带来的是C语言中函数返回一维数组和二维数组的例子。


函数返回一维数组

函数返回一维数组中需要注意的是:定义函数时需要在函数类型的后面加上一个 * 号;函数体中定义的一维数组需要在其类型的前面加上关键字 static;函数体中定义的数组的长度需要确定。
一个简单的函数返回一维数组的C代码如下。

# include <stdio.h>

int* return_array ()  // 在定义返回一维数组的函数时,在定义的函数类型后要加*号
{
    
    
    static int a[10];  //这里一定要加上static,这样数组a就是一个静态数组了,数组长度需要再这里确定
    for(int i=0; i<10; i++)
        a[i] = i;
    return a;
}

int main ()
{
    
       
    int *array;
    array = return_array(); //调用函数
    for(int i=0; i<10; i++)
        printf("array[%d] = %d\n",i,array[i]);
}

上面代码中最关键的还是在函数体中定义数组的部分,为什么要将数组的类型定义为静态数组,也就是在其类型前面加上static关键字。这是因为静态数组的生命周期从运行到结束贯穿整个程序,而如果你不加static关键字的话,那么你定义在函数体中的数组就是一个局部变量,因此上面函数的返回值就是局部变量a的地址,在函数被调用之后,数组a中的值就不存在了,因此也就无法在主函数中通过调用函数得到数组中存放的值了。
上面代码的运行结果如下图所示。
在这里插入图片描述
可以看到,在主函数中调用函数打印函数体中定义的数组值是正确的!
如果在定义数组时没有添加关键字static,输出结果如下图所示。
在这里插入图片描述
运行结果出现了警告:函数返回的是局部变量的地址,因此数组中的各个值也没有正确的输出。


函数返回二维数组

函数返回二维数组中需要注意的是:定义函数时需要在函数类型的后面加上两个 * 号;函数体中定义的二维数组需要依次分配行长度和列长度;函数体中定义的二维数组的长度需要确定。
一个简单的函数返回二维数组的C代码如下。

# include <stdio.h>
# include <stdlib.h>

int** return_array ()
{
    
    
    int** a; 
    a = (int**)malloc(5*sizeof(int*));  //分配行长度
    for(int i=0; i<5; i++)
        a[i] = (int*)malloc(5*sizeof(int));  //分配列长度

    for(int i=0; i<5; i++)   //给数组赋初值
        for(int j=0; j<5; j++)
            a[i][j] = i*10+j;
    return a;
}

int main ()
{
    
       
    int **array;
    array = return_array(); //调用函数
    for(int i=0; i<5; i++)
    {
    
    
        for(int j=0; j<5; j++)
            printf("array[%d][%d] = %2d  ",i,j,array[i][j]);
        printf("\n");
    }     
}

上面代码的运行结果如下图所示。
在这里插入图片描述
有人可能疑惑为什么定义二维数组时不直接在中括号里给定行长和列长,就像下面这样。
在这里插入图片描述
但是这样定义后,输出时警告我们定义的数组和返回类型不兼容。


以上就是C语言中函数返回一维数组和二维数组的所有内容了!
本文参考文章:
C语言函数如何正确返回数组?
二维数组的传递/二维数组作为函数的返回值

猜你喜欢

转载自blog.csdn.net/weixin_42570192/article/details/131203554