我明白,運算子&的地址存盤的是變數的實際地址。指標存盤的是對一個地址的參考,我可以使用解除參考運算子*來訪問這個地址。我不明白的是,如何使一個指標指向一個給定的地址。下面的方法都不奏效。
void getDouble(double & addr) {
//Incorrect type cast error
std::cout << *((double *)addr) << std::endl;
//不正確的型別轉換錯誤。
double *dbl = addr;
std::cout << (double *)addr << std::endl;
在C/C 中,從一個地址獲取數值的正確方法是什么?
uj5u.com熱心網友回復:
我理解的是,運算子&的地址可以存盤變數的實際地址
運算子不會 "存盤 "任何東西。當你傳遞一個值作為內置 address-of 運算子的運算元時,產生的值是一個指向物件的指標。如果運算元是一個參考,那么結果就是一個指向被參考物件的指標。
一個指標存盤了對一個地址的參考一個指標存盤了一個地址。指標的值代表該地址。使用間接運算子,你可以通過一個指標間接地得到一個指向被指向物件的l值。
// Incorrect type cast error。 double *dbl = addr;
addr是一個對double的參考。對double的參考并不隱含地轉換為一個指標。//Incorrect type cast error。 std::cout << *((double *)addr) << std::endl;對
double的參考甚至不能明確地轉換為指標。你可以使用addressof運算子來獲得一個指向被參考物件的指標,如果這是你想要做的:
你可以使用addressof運算子來獲得一個指標。
double *dbl = &addr; // pointer to object referred by addr在C 中,從一個地址中獲取值的正確方法是什么
如果你有參考,例如例子中的
addr,那么你只需像其他值一樣使用參考即可。該參考將被隱含地間接通過,并且被參考物件的值被訪問。例如,如果你想列印該物件的值:std::cout << addr;
好的,所以在C 中是不同的,而在C中,&嚴格來說是指address-of
。重要的是要理解標記在不同的語境中具有不同的含義。例如:
int i = 1 & 2。 // ^-- bitwise-and operator (binary). int* ptr = &i; // ^-- addressof operator (unary) // ^---------- 不是一個運算子;表示一個指標型別。 int i2 = *i * 42; //^ ^- 乘法運算子(二進制) // ^---- indirection operator (unary); int& ref = i; // ^不是一個運算子;表示一個參考型別。 int i3 = ref; // automatic indirection。C 和C是不同的語言。C語言沒有參考變數;這個例子的程式根本不符合格式。最好不要根據對另一種語言的了解來對一種語言進行假設。
uj5u.com熱心網友回復:
我理解,運算子的地址
&存盤了變數的實際地址。它回傳地址,它不存盤地址的地方。 你需要一個單獨的賦值來存盤該地址,比如在一個指標中。
指標存盤了對一個地址的參考指標存盤了對一個地址的參考。
不,它存盤的是實際的地址。
我可以使用解除參考運算子
*來訪問。你去參考一個指標來訪問存盤在該指標所指向的地址上的資料。
我不明白的是如何使指標指向一個給定的地址。下面的方法都不奏效。
這是因為你實際上沒有使用
&運算子的地址開始。double &addr宣告了一個名為addr的參考,該參考指向某個double。 它并不接受一個名為addr的double的地址。 參考只是一個別名,它不是一個指標(盡管大多數編譯器會使用指標來實作參考)。你需要使用實際的
&運算子(或std::addressof()),即使你正在處理一個變數的參考。 獲取一個參考的地址會回傳被參考的東西的地址。void getDouble(double & dbl) { //span>列印雙數的值。 std::cout << dbl << std::endl; //列印雙數的地址。 std::cout << &dbl << std::endl; //列印出雙倍數的值。 std::cout << *(&dbl) << std::endl; //列印雙數的地址。 double *addr = &dbl; std::cout << addr << std::endl。 //列印雙倍數的值。 std::cout << *addr << std::endl; }轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315484.html
標籤:
