利用指针给数组赋值的函数_利用指针给数组赋值的函数是

利用指针给数组赋值的函数_利用指针给数组赋值的函数是为什么说函数只能返回一个值,返回一个数组或指针依次赋值给变量不可以吗?菜鸟求指点可以啊!更好的做法是结构体,可以返回多个不同类型的值返回一个C数组是不行的。但你可以返回C++的array、tuple和pair。这些都要求长度是编译期可以确

为什么说函数只能返回一个值,返回一个数组或指针依次赋值给变量不可以吗?
  菜鸟求指点

  可以啊!更好的做法是结构体,可以返回多个不同类型的值

  返回一个C数组是不行的。但你可以返回C++的array、tuple和pair。这些都要求长度是编译期可以确定的。不能确定就要其他方法了。

  返回指针有生存期管理的问题。你不能定义一个本地变量数组,然后返回指针,这样的代码有未定义行为。你可以自己new一块内存来返回,然后调用者必须负责delete——忘了就是内存泄漏。所以更常见的是返回一个智能指针。另外一种做法是调用者分配内存,把指针和长度作为参数传给函数。这也是一种常规做法。

  C : 确实只能返回一个值,想要“返回多个值”用结构体,或者采用全局变量传递信息,或者指针传参(见下一条);

  C++:可以像 C 用结构体,或者很多 C/C++ 第三方库采用的是这种方法:传入一个指针/引用参数存放返回结果;比如 OpenCV 里用来相机标定的函数 calibrateCamera,里面传入的参数里有四个是用来存放返回结果的:

  当然了,也可以用 解决:

  事实上很多语言都可以用元组搞定这个问题,比如

  Rust:

  Haskell:

  Swift:Swift 函数 | Swift 编程语言中文教程

  F#:Tuples – F# | Microsoft Learn

  C# :

  除了像 C / C++ 的方法返回结构体或者 ,C# 也可以用 out 参数,

  C#7.0 后可以用内联变量声明简化上面这个写法:

  Solidity:

  有很多语言是天然支持返回多个值的(本质上还是元组),比如

  Python:

  Go:

  反而像 Java 这种 \enclose{horizontalstrike}{十分垃圾的} 语言就只能返回一个封装类了( \enclose{horizontalstrike}{被C\#甩了十几条街} ):-)

  补充一下为什么

  早期编程语言设计上并不认为必须有返回值。很多语言有过程的概念,它与函数有不少区别,其中之一就是过程不返回值。

  而函数之所以有返回值,是模拟数学上函数的概念,把自变量计算成应变量,而常见的数学函数都只有一个应变量。

  以C语言为例,早期可以不写返回类型,是否返回值,全看有没有return语句。void这个关键字是比较晚才加入C语言中。

  在结构化编程盛行时,甚至要求只有一个出口,即一个函数中只能有一个return语句。当时不支持多返回值也不难理解。

  当年有一个小技巧可以让C语言在x86体系下,返回多个值,不知道还有没有人知道?

  问题问得不清不楚——“返回一个指针”不也是“返回一个值”吗?那么什么又叫“依次赋值给变量”?又是赋值哪个变量?是指把调用函数后的返回值赋值给某个变量吗?

  看不懂,答不了。这不是编程水平菜,是语文水平菜。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/94888.html

(0)
上一篇 2024年 5月 25日 下午8:10
下一篇 2024年 5月 25日 下午8:21

相关推荐

关注微信