[英]C++ char pointers
我有一個
*(char *) &data;
但需要發送為
(char *) &data;
兩者之間有區別嗎?
添加
對困惑感到抱歉。 我有兩個應用程序,第一個使用C的應用程序給我*(char *)&data。 在接收端(通過UDP發送),C ++應用程序期望數據為(char *)&data。 我想澄清兩個概念是相同還是不同
是。 它們是有區別的。 第一個表達式的類型為char&
1 。 第二個表達式的類型為char*
。
1.感謝Pete的解釋,為什么使用char&
而不是char
。 閱讀評論。
&data
這將提供數據變量的地址。 指針指向分配給數據的內存位置塊。
(char *) &data
然后,我們將指針類型轉換為字符指針-現在有效地將數據解釋為字符流(一次1個字節)。 因此,仍然在內存中是相同的地址位置,只是我們希望通過類型轉換以不同的方式解釋此內存塊。 最后,
*(char *) &data
將您從上面獲得的指針所指向的內存位置的值返回給您-這是內存的第一個字節。
這似乎是非常復雜的代碼。
如前所述,第一個表達式的計算結果為char&(可編輯的對char的引用),第二個表達式的計算結果為char *。
第一個是對char的引用的取消引用的指針。 第二個是指向char的引用的指針。 兩種將char數據傳遞給我的方法似乎都是愚蠢的。 如果您需要發送可更新的引用,請發送&data
,這將是指向char data
的指針。 如果通過發送是指傳遞給方法,則還可以將方法定義為
void foo(char& inData) { ... }
在這種情況下,您可以致電
foo(data);
並且foo內部的參數inData將被更新,因為它是一個引用。 另一種選擇是
void foo(char* data) { ... }
在這種情況下,您會打電話給
foo(&data);
這是一種更純粹的C樣式方法,但是我仍然在C ++中經常使用它,因為我發現當對象顯式聲明為指針時,您正在處理的是對對象的引用。
我不確定為什么您要處理*(char *) &data
,並且我敢說在代碼中使用它是不好的做法,因為它會使代碼的可讀性降低。
有關引用的更多信息以及與指針的比較,請參見此處http://www.cprogramming.com/tutorial/references.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.