我[錯誤]從類型「浮動」交換與非const引用參數
#include <stdio.h>
void swap(float &a, float &b){
float temp=a;
a=b;
b=temp;
}
main()
{
int a=10, b=5;
swap((float)a, (float)b);
printf("%d%d",a,b);
}
我[錯誤]從類型「浮動」交換與非const引用參數
#include <stdio.h>
void swap(float &a, float &b){
float temp=a;
a=b;
b=temp;
}
main()
{
int a=10, b=5;
swap((float)a, (float)b);
printf("%d%d",a,b);
}
Vlad是正確的,爲什麼投到float
?所有值均使用int
。但是,如果你有一些理由做這樣的說法,你必須在你的cast
和references
一致:
#include <stdio.h>
void swap(float *a, float *b){
float temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=10, b=5;
swap((float*)&a, (float*)&b);
printf("\n%d%d\n\n",a,b);
return 0;
}
輸出:
$ ./bin/floatcast
510
當你傳遞一個地址給一個函數,它必須以pointer
爲參數。因此void swap(float *a,..
當您需要一個reference
到一個變量的地址(作爲pointer
傳遞)時,您可以使用address of
運算符&
。當您處理作爲pointer
傳遞的值時,爲了在pointer
指向的values
上運行,您必須使用*
運算符指示dereference
。把所有這些放在一起,你就可以得到你的代碼。 (非常容易,只需使用int
... :)
C++ Refernce
如果我理解您在您的評論想要什麼,你想是這樣的:
#include <iostream>
// using namespace std;
void swap(float& a, float& b){
float temp=a;
a=b;
b=temp;
}
int main()
{
int a=10, b=5;
swap ((float&)a, (float&)b);
std::cout << std::endl << a << b << std::endl << std::endl;
return 0;
}
輸出:
$ ./bin/floatref
510
它正在工作......但如果我想使用swap(float&,float&),它將如何? <對不起..我的英文不好> – 2014-12-06 06:27:02
我很困惑。你不能使用'float&',因爲在你使用'&'後你不再有'float',你有'float'的地址,它是'float'的指針,所以你必須使用'float *' – 2014-12-06 06:29:09
@ DavidC.Rankin:這是一個C++參考。 – 2014-12-06 06:29:41
您正在試圖交換臨時對象的右值的類型「浮動&」的非const引用無效初始化(由於使用鑄造而創建)。此外,退出交換後將被刪除。您不能綁定具有非常量引用的臨時對象。所以在這樣的呼叫中沒有任何意義。完全不清楚你爲什麼試圖將這兩個整數都浮動來交換它們。爲什麼不自己交換整數?
寫像
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
功能考慮到已經存在的標準功能std::swap
如果你想用C來寫掉函數,那麼它看起來就像
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
我只想用互換(浮動,浮動) ,因爲我還需要換浮點類型 – 2014-12-06 06:18:51
@DracudaKid您可以重載在C++的功能。所以,你將有兩個函數具有相同的名字,或者你可以寫一個模板函數與標準函數相同的方式或使用標準函數swap本身。在C中,你必須重命名其中一個函數。 – 2014-12-06 06:21:54
哦...我明白了......感謝您的幫助:) – 2014-12-06 06:29:13
您必須使用指針(*)來獲取數組。雖然只有你必須給予&符號(&)。使用下面的代碼。
#include <stdio.h>
void swap(int* a, int *b){
float temp=*a;
*a=*b;
*b=temp;
}
main()
{
int a=10, b=5;
swap(&a, &b);
printf("%d \t %d\n",a,b);
}
我不認爲它的工作原理 – 2014-12-06 06:16:57
對不起。我完成了編輯。 – 2014-12-06 06:18:15
在C++中,您應該使用std::swap
,或者如果您願意,可以編寫自己的模板來交換任意兩個值。
template <typename T>
void swap(T & a, T & b)
{
T temp = a;
a = b;
b = temp;
}
int main() {
int a = 10, b = 5;
swap(a, b);
std::cout << a << " \t " << b << std::endl;
return 0;
}
你所要完成的(治療int
爲float
)將會導致不確定的行爲 - 它可能對你的編譯工作,但它可以很容易地在不同的編譯器或結構斷裂。如果您真的需要,您可以使用reinterpret_cast
強制執行此行爲。
'(浮點)A'創建一個右值,和一個右值不能結合到左值參考。您需要將'a'和'b'聲明爲浮點,以便'swap(a,b)'工作。 – cdhowie 2014-12-06 06:06:47
'main()'需要'int main()'。 – 2014-12-06 06:10:47
'無效互換(浮動*一,浮動* B)''交換((浮動*)&A,(浮動*)&b);'爲什麼有人會使用'float',而不是在這種情況下,'int'我是無法理解。 – 2014-12-06 06:14:30