1
219
在本例中,数组变量
只是句法上的糖分。你真的可以用这个替代它,它仍然可以工作:
因此,在同样的意义上,您希望从函数返回的实际上是指向数组中第一个元素的指针:
你仍然可以像使用普通数组一样使用它:
|
2
122
C++函数不能按值返回C样式数组。最接近的方法是返回指针。此外,参数列表中的数组类型仅转换为指针。
使用Boost或C++ 11,通过引用仅是可选的,语法也不那么容易弯曲。
这个
|
3
27
在C++ 11中,可以返回
|
4
25
8.3.5美元/8个州- 函数不应具有数组或函数类型的返回类型,尽管它们可能具有指针或引用类型的返回类型。不应有函数数组,尽管可以有指向函数的指针数组。”
|
5
14
这正是你所期望的。好的一面是
看起来你真正想做的只是填充一个集合。如果您没有返回集合的新实例的特定原因,则不要。我们可以这样做
通过这种方式,可以获得对传递给函数的数组的引用,而不是它的私有副本。调用者将看到您对参数所做的任何更改。如果你想的话,你可以返回一个引用,但这并不是一个好主意,因为这意味着你得到了一些与你所传递的不同的东西。
在大多数情况下,使用
所有这些都很好,但是惯用c++很少作为一个整体与集合一起工作。通常,您将在这些集合上使用迭代器。看起来更像这样
foo现在“指向”修改的
它真正好的地方在于,它在向量上的效果与在普通C数组和许多其他类型的集合上的效果一样好
现在看起来非常像这个问题中其他地方给出的普通指针示例。 |
6
10
实际上被视为:
它并没有真正返回数组。你正在返回一个指向 数组地址。 但请记住,传入数组时,只传入一个指针。 因此,当您修改数组数据时,实际上是在修改 你已经在外面修改了结果。
我建议您考虑在fillarr函数中输入一个长度,比如 这个。
如果您只想将数组设置为一些默认值,请考虑使用 内置的memset函数。 比如: 内存集((int*)&arr,5,sizeof(int)); 尽管我在讨论这个话题。你说你在使用C++。看看如何使用stl向量。您的代码可能更健壮。 |
7
6
这是一个相当老的问题,但我要把我的2分钱,因为有很多答案,但没有一个显示所有可能的方法在一个明确和简洁的方式(不确定的简洁位,因为这有点失控)。热释光;博士)。 我假设OP希望返回传入的数组而不进行复制,这是一种直接传递给调用者的方法,以便传递给另一个函数,从而使代码看起来更漂亮。 但是,使用这样的数组就是让它衰减为指针,并让编译器处理它 喜欢
不过,那看起来很难看,而且很难读。我现在用一些东西来帮助那些在2010年不存在的东西,我也用它来做函数指针:
这会将类型移动到预期的位置,从而 更具可读性。当然,如果您只使用5个元素,那么使用模板是多余的,因此您当然可以硬编码它:
就像我说的,我的
这看起来又很难看了,但至少还是更可读,虽然
当然,你可以指定一个特定的类型,而不是使用我的助手。
那时,自由功能
至于访问数组,您可以将它传递给另一个采用相同参数类型的函数,也可以为它创建一个别名(这没有多大意义,因为您在该范围中已经有了原始的)。访问数组引用就像访问原始数组一样。
或
总而言之,如果要对数组进行迭代,最好不要让数组衰退为指针。这只是一个坏主意,因为它会阻止编译器保护您免受攻击,并使您的代码更难阅读。除非你有很好的理由不这样做,否则总是试着帮助编译器尽可能长地保存类型。 编辑哦,为了完整性,您可以允许它降级为指针,但这会将数组与其所包含的元素数解耦。这在C/C++中做了很多,通常通过传递数组中的元素数量来减轻。但是,如果您犯了一个错误,并将错误的值传递给元素数,编译器就帮不了您。
请注意,返回值已丢失其原始类型,并降级为指针。因此,您现在需要自己确保不会溢出阵列。
或
有趣的是,这和
|
8
5
要从函数返回数组,让我们在结构中定义该数组; 看起来像这样
我们可以通过以下方式将数组传递给函数并为其赋值:
|
9
3
最简单的方法是通过引用返回它,即使你不写 “&”符号,则自动通过引用返回
|
10
2
|
11
1
因为上述路径是正确的。但我认为,如果我们只是返回一个函数的局部数组变量,有时它会返回垃圾值作为它的元素。 为了避免这种情况,我必须动态创建数组并继续。就像这样。
|
12
0
|
13
0
https://www.tutorialspoint.com/cplusplus/cpp_return_arrays_from_functions.htm C++不允许将整个数组作为参数返回到函数。但是,可以通过指定不带索引的数组名称来返回指向数组的指针。
将这些规则应用于当前问题,我们可以编写如下程序:
输出为:
|
14
0
那么:
|
15
0
实际上,当在函数中传递数组时,指向原始数组的指针将在函数参数中传递,因此对该函数中的数组所做的更改实际上是在原始数组上进行的。
运行它,您将看到更改 |
16
0
下面是要解决的这类问题的完整示例
|
17
0
或者……用一种更简单的方法(但你必须知道尺寸……):
|
18
-1
|
19
-2
. . . 函数调用:
|
Community wiki · safe_ptr实现 1 年前 |
lplplplp · 为什么不能访问函数外的结构指针 2 年前 |
Fabio · 在c中将指针赋给常数指针++ 2 年前 |
Gabe Tucker · 无法在golang中分配接口对象指针 2 年前 |