【发布时间】:2017-07-15 23:03:00
【问题描述】:
2 月 25 日编辑:更改了我的问题,并为我的问题添加了一些描述。
=======================有人抱怨======================= ====
致那些对我的问题投反对票的人:
这是我关于堆栈溢出的第一个问题。
- 关于这个问题:这个问题是从我的想法中浮现出来的。就我而言,我认为
return 0实际上为我做了一些事情 程序,它确实做到了。唯一会误会的 人们可能是我提出了一个问题,我认为它是这样工作的 但它没有。 - 关于我的态度。也许你们这里的人是 C++ 专家,你可能认为我的问题很愚蠢。然而,作为一个非英语母语的人,这个问题花了我 4 个小时思考和做测试,2 个小时在谷歌上搜索,但也花了我至少半个小时来发布。作为一个自学成才的新手,我已经尽我最大的努力提出这个问题。
因此,请至少发表评论,让我知道当您投反对票时,我可以改进我提交问题的方式。不要只是简单的点击。你的点击就像是一个让我思考的新问题:“我做错了吗?” “我怎么解决?”这将迫使我重新考虑我所做的事情;但就像普通问题一样,如果有人可以提供一些提示会有所帮助。
作为一个新手,我不会停下来提出问题;所以我认为指出我的问题会帮助我提高我提出高质量问题的能力,你也会受益,因为你将来可能会看到一些好的问题。
最后,再次感谢这个地方;我从这里得到了很多答案;也感谢那些帮助我解决问题的人。
========================问题行======================
这个函数我打算通过使用“使用别名形式”来获取一个数组参数,并尝试将数组本身返回给调用函数。我尝试对这个函数使用指针和引用。
这是我从 C++ 入门中学到的:
using arrT = int[10];
arrT* func(int i);
此代码假设定义了一个函数,该函数将返回一个指针,该指针指向一个包含十个整数的数组;我明白这一点,但我没有从书中得到一个例子。
这是我的尝试:
使用指针,试图直接返回指针,但是出错了。
arrT* return_p(arrT arr){
for(int i = 0; i < 10; ++i){
*(arr+i) *= 2;
}
return arr;//error, can't convert int* to int (*)[10]
}
我知道因为这里arr 被转换并丢失了数组的维度。但是,我刚刚找到了一种适合我的方法:
arrT* return_p(arrT arr){
for(int i = 0; i < 10; ++i){
*(arr+i) *= 2;
}
return 0; // return 0 is return pointer arr that point the first element of array arr.
}
我只是想知道return 0 是如何在这里工作的?如果我使用引用而不是使用指针,我确实有另一个结果:
arrT& return_r(arrT &arr){
for(auto &i : arr){
i *= 2;
}
return arr; // works, returned the reference to array named arr
}
但return 0 不适用于参考版本。
arrT& return_r(arrT &arr){
for(auto &i : arr){
i *= 2;
}
return 0; // error, using an int rvalue to initialize a non_const that has type int(&)[10];
}
我希望我清楚地说明了我的问题。感谢您的帮助!
【问题讨论】:
-
return 0只返回0,没有什么特殊含义,也没有什么神奇的作用。 -
你试过 return_p(arrT *arr) 吗?
-
是的,该表单不起作用。
-
return arr;->return (arrT *)arr;在第一个例子中
标签: c++ arrays c++11 pointers reference