簡體   English   中英

C ++ char指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM