這是使用遞回反轉陣列的代碼
使用return rev(arr, start,--end);
#include <iostream>
using namespace std;
void rev(int arr[],int start,int end)
{
if(start >= end)
{
return;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
return rev(arr, start,--end);
}
void reverse(int arr[],int size)
{
rev(arr,0,size-1);
}
使用rev(arr, start,--end);
void rev(int arr[],int start,int end)
{
if(start >= end)
{
return;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
rev(arr, start,--end);
}
void reverse(int arr[],int size)
{
rev(arr,0,size-1);
}
他們都給出相同的輸出7 6 5 4 3 2 1
在這里使用 return 和不使用 return和 rev 有什么區別?
uj5u.com熱心網友回復:
沒有區別。
來自9.6.3 [stmt.return]:
沒有運算元的 return 陳述句只能用于回傳型別為cv void 的函式、建構式 (15.1) 或解構式 (15.4)。帶有 void 型別運算元的 return 陳述句只能在回傳型別為cv void的函式中使用。
[...]
從建構式、解構式或具有cv void 回傳型別的函式的末尾流出等效于沒有運算元的回傳。
因為函式呼叫運算式的型別是其簽名中定義的函式的cv限定回傳型別,并且因為您的函式被定義為 return void,所以下面的三個是等價的:
void f() {
//stuff
f();
return;
}
void g() {
//same stuff
return g();
}
void h() {
//same stuff
h();
}
uj5u.com熱心網友回復:
#include <iostream>
using namespace::std;
void rev();
void rev(){
return 1;
}
int main(){
int val=rev();
cout<<rev<<endl;
return 0;
}
g test.cpp -o test
test.cpp: In function ‘void rev()’:
test.cpp:7:9: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
7 | return 1;
| ^
test.cpp: In function ‘int main()’:
test.cpp:10:13: error: void value not ignored as it ought to be
10 | int val=rev();
編譯器正在生成錯誤,如果回傳型別為 void 我們不能回傳任何值,也不需要回傳任何值,因為作為引數傳遞的陣列正在被修改。
為什么你的編譯器沒有產生錯誤,因為你的兩個方法都回傳了注釋。
void foo(){
return;//returns nothing
}
#include <iostream>
using namespace std;
void rev(int arr[],int start,int end)
{
if(start >= end)
{
return;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
return rev(arr, start,--end);//doesn't returns any value
}
void reverse(int arr[],int size)
{
rev(arr,0,size-1);
}
Using rev(arr, start,--end);
void rev(int arr[],int start,int end)
{
if(start >= end)
{
return;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
rev(arr, start,--end);
}
void reverse(int arr[],int size)
{
rev(arr,0,size-1);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405871.html
標籤:
