[英]How to access the members of structure through pointers same as we access array?
我在模擬測試中遇到了一個問題,該問題未在 IDE 中運行,但我無法理解測試中給出的那段代碼背后的概念。
printf (“%c, %c”, *( (char*) q + 1), *( (char*) q + 2) );
這里指向 struct q 的指針如何使用數字訪問指針的成員。
這是代碼的鏈接
如果q
是指向任何 object 類型的指針,則將其轉換為字符類型提供了一種訪問指向的 object(如果有)表示的字節的方法。 但是,如果q
是指向結構類型的指針,那么您提供的代碼本身不會訪問成員。 盡管結構類型實例的表示包括所有結構成員的表示,但(char*) q + 1
不是選擇成員,而是選擇一個字節(以指向該字節的指針的形式)——在結構開頭的偏移量 1 處。 該字節可能是第一個成員的一部分(從偏移量 0 開始)、第二個成員的一部分,或者不是任何成員的一部分。
給定(char*) q + 1
是指向從 object *q
開始的偏移量 1 處的字節的指針,並且*q
的大小至少為兩個字節,表達式*( (char*) q + 1)
的計算結果為該字節的值。 它相當於((char *)q)[1]
。
在 c 中,結構成員只是 memory 空間映射到該結構定義。 具有三個字符的結構意味着映射到 this 結構的 3 字節空間。
q 是一個指針。 所以q + 1
表示一個地址轉發到基結構地址
(char*)
表示這不再是結構,這是一個 char 指針
*( (char*) q + 2) )
或簡單的 *x 表示取消引用指針,因此獲取 char 值。
有一些例外(如果不是所有成員都是同一類型)檢查結構填充和包裝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.