簡體   English   中英

*((int *)(&val)+1)是什么意思

[英]What does this mean *((int*)(&val) +1)

我試圖理解這一行代碼。 有人能幫我嗎? 是否將結果保存在變量val或變量val的地址中?

*((int*)(&val) +1)= A*(y) + (B - C)

謝謝

&valval地址
(int*)(&val)將此地址視為指向int的指針
(int*)(&val) +1將該地址加1(乘以sizeof(int)倍數)
*((int*)(&val) +1) = ...在此遞增地址處分配右側值

它將val解釋為好像是整數數組,並將右手表達式的結果存儲在其第二個元素中。 為了確切地理解所有內容,您應該提供更多上下文(我的猜測:它是在操縱double值的原始內容嗎?)

請注意,由於嚴格的別名規則,根據val的類型,這可能是未定義的行為。

將表達式*((int*)(&val) +1)分成較小的表達式以了解它:

  1. 接受val&val)地址,並將其作為指向int (int *)的指針
  2. 向此指針添加1 +1 ,這意味着“將指針移動到下一個int”,因為它是一個int數組。
  3. 通過組合*=最終確定將右側表達式應用於指針所指向的int

希望其他人回答了您的問題。 除了其他人所說的,相同的代碼可以編寫如下:

(int*)(&val)[1]= A*(y) + (B - C)

其中(int *)將類型轉換&val作為指向整數的隱式指針,該整數指向val的地址,[1]指示存儲val的位置之前的第一個整數位置。

這就是數組的解釋方式。 說你有一個數組

int a[10];

對於此數組, “ a”是一個指向基地址(元素a [0]的地址)的指針,而a [i]除了*(a + i)就是什么,即位於i前面的元素數組的第一個元素。

這是不正確的代碼,您永遠不要使用它

想象一下這堂課:

class A {
    int number = 10;
    public:
    void print(){ std::cout << number; }
};

int number專用於訪問,不能使用!

那么我們如何訪問這個私有的int

只是:

A obj;
*( (int*) ( &obj ) ) = 100;
obj.print();

輸出

100


演示

現在,如果您將有多個數據,那么如何訪問?

通過這種語法:
*((int*)(&val) +1)

它說:
找到第一個數據的地址,
一個指標繼續前進,
將其轉換為int*
然后取消引用
然后初始化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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