[英]What does this mean *((int*)(&val) +1)
我試圖理解這一行代碼。 有人能幫我嗎? 是否將結果保存在變量val或變量val的地址中?
*((int*)(&val) +1)= A*(y) + (B - C)
謝謝
&val
取val
地址
(int*)(&val)
將此地址視為指向int
的指針
(int*)(&val) +1
將該地址加1(乘以sizeof(int)
倍數)
*((int*)(&val) +1) = ...
在此遞增地址處分配右側值
它將val
解釋為好像是整數數組,並將右手表達式的結果存儲在其第二個元素中。 為了確切地理解所有內容,您應該提供更多上下文(我的猜測:它是在操縱double
值的原始內容嗎?)
請注意,由於嚴格的別名規則,根據val
的類型,這可能是未定義的行為。
將表達式*((int*)(&val) +1)
分成較小的表達式以了解它:
val
( &val)
地址,並將其作為指向int (int *)
的指針 +1
,這意味着“將指針移動到下一個int”,因為它是一個int數組。 *
和=
最終確定將右側表達式應用於指針所指向的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.