簡體   English   中英

如何像訪問數組一樣通過指針訪問結構的成員?

[英]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 的指針如何使用數字訪問指針的成員。

這是代碼的鏈接

https://ide.geeksforgeeks.org/7V6mVJZvre

如果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.

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