c语言函数返回数组指针的函数,c语言函数返回数组指针后如何调用

dfnjsfkhak 21 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言函数返回数组指针的函数的问题,于是小编就整理了3个相关介绍c语言函数返回数组指针的函数的解答,让我们一起看看吧。

  1. C语言函数能返回一个二维数组吗?
  2. C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?
  3. c语言delete函数返回值?

C语言函数能返回一个二维数组吗?

1、函数不能返回一个数组,只能返回一个变量,或地址 。你想直接返回一个二维数组,这是做不到的。可以用下面的方法 ,先建一个结构体。

struct array{int a[3][3];}; array solve(){array a;return a;} 通过这种方法,来得到二维数组。

c语言函数返回数组指针的函数,c语言函数返回数组指针后如何调用-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

2、数组在作为函数返回值或者函数参数时,实际上只作为指针来返回或者传递的。因此返回值用指针数据类型

如下面的代码

int g_a[4] = {1,2,3,4};int * retn_arrary() //返回值用指针类型即要。{return g_a; }

c语言函数返回数组指针的函数,c语言函数返回数组指针后如何调用-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?

简单的说:

  • 函数的返回值在函数返回时有效

  • 函数内的局部变量,退出函数时立刻失效

    c语言函数返回数组指针的函数,c语言函数返回数组指针后如何调用-第3张图片-芜湖力博教育咨询公司
    (图片来源网络,侵删)

相应的,要注意:

  • 不要期望在函数外访问函数的局部变量:例如在函数中定义局部数组,并将数组指针返回调用者,这一指针在返回时已经失效,很可能指向其它数据。

  • 若需要从函数中获取较多、较复杂的数据,可通过传递指针参数的方式实现:例如C库函数中的sprintf

根据所用编译器和CPU的不同,以及返回值数据类型的不同,C语言中的函数返回值可能通过寄存器传递,也可能通过栈传递。对大多数CPU和编译器来说,出于性能考虑,能使用寄存器传递的,尽量使用寄存器传递,只有当寄存器不够用的时候,才会通过栈传递。

针对这两种情况,我分别举个x64 + GCC环境下的例子来说明。

下图中的一段简单的代码,返回值是一个有符号整数类型

我们看下x64/GCC下面对应的汇编代码:

test函数中的

1129: mov $0x2,%eax

便是把返回值2存放到eax寄存器中。而main函数中的

113d: callq 1125 <test>

1142: mov %eax,-0x4(%rbp)

则先调用test函数,然后把返回值从eax中取出,并存放到rbp - 4的地址处,也就是赋值给局部变量a。

一般a=fun(),函数执行后,返回值在寄存器,立码是个赋值运算,把值从寄存器或寄存器指向的栈空间复制到变量的内存空间。(返回结构会比较复杂)但都不是啥要注意的。一般说法也不是返回main,是返回调用

c语言delete函数返回值?

返回值true。

C++中delete函数用于回收new分配的内存空间。

C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。

关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。

在针对简单的基本数据类型,使用delete也可以回收 new[] 分配的一组对象的内存空间,因为:基本的数据类型对象没有析构函数,并且new 在分配内存时会记录分配的空间大小,则delete时能正确释放内存,无需调用析构函数释放其余指针。因此两种方式均可。

但是在对于自定义类型的时候,使用new[] 分配的一组对象的内存空间最好还是要用delete[]回收。

到此,以上就是小编对于c语言函数返回数组指针的函数的问题就介绍到这了,希望介绍关于c语言函数返回数组指针的函数的3点解答对大家有用

标签: 函数 返回 数组