栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

关于C语言函数返回数组问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于C语言函数返回数组问题

现象
int *test_fun2()
{
    int array[10] = { 0 };
    int i = 0;

    for (i = 0; i < 10; i++)
    {
        array[i] = 8;
    }

    return array;
}

void main(void)
{
    int *arr = NULL;
    arr = test_fun2();

    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("arr = %dn", arr[i]);
    }
}

输出如下:

另添加附加测试

int i = 0;
for (i = 0; i < 10; i++)
{
    printf("arr = %dn", arr[0]);
}

输出如下:

原因:函数返回指向栈的内存,内容被释放。

原因

因为C语言数组与指针的暧昧关系,编译器也很难区分它们,所以我们不可能为C语言数组赋值。而且由于“赋值”操作也属于C语言的基本操作,为了贴合硬件,要求其必须在几个处理器周期完成,所以单个的“赋值”运算符 = 基本上不可能扩展到需要几千乃至几万个机器周期,以对成千上万个数组元素赋值。

解决

使用结构体包含数组的方式
原因:C语言中的结构体是可以包含多个字节信息的。

struct s 
{ 
    char arr[10]; 
}; 
struct s test_fun3()
{
    struct s ret;

    ret.arr[0] = 11;
    ret.arr[1] = 22;
    ret.arr[2] = 33;

    return ret;
}

void main(void)
{
    struct s s1;
    s1 = test_fun3();
    printf("s1=%d, s2=%d, s3=%dn", s1.arr[0], s1.arr[1], s1.arr[2]);
}

输出如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号