[英]How the struct and pointer acts
在 SoloLearn 應用程序中進行測驗時,我遇到了某個代碼。
#include <stdio.h>
struct node{
int a, b, c;
};
int main()
{
struct node num = {3, 5, 6};
struct node *ptr = #
printf("%d\n", *ptr);
printf("%d\n", *((int*)ptr + 1 + (3-2)));
return 0;
}
結果打印3
和6
,我得到了正確的答案,但我不確定我是否正確理解了struct 語句和指針函數。
以下步驟是我如何理解代碼的工作原理。
由於struct node
,num 3, 5, 6 被設置為num
變量中的a, b, c
。
*ptr
指向 num 的首地址,因為struct node *ptr = #
這意味着它指向這是該指數= 0的地址3
在{3,5,6}。
因此, printf("%d\\n", *ptr);
打印3
,
printf("%d\\n", *((int*)ptr + 1 + (3-2)));
正在打印 * (0+1+1)這是num
index = 2 ,等於6
。
這是正確的嗎?
是的,但請允許我調整您的術語。 特別是,使用短語“索引”對我來說似乎有點不對勁,因為我們不是在談論數組。 我還將打破您的第 4 點,以更明確地說明那里發生的事情。
ptr
指向 num 的起始地址,因為struct node *ptr = #
,與num.a
的地址相同。printf("%d\\n", *ptr);
打印 3。(int*)ptr
產生一個指向num.a
的指針,具有正確的類型。ptr
加 2 意味着我們將兩個 int 的大小加到地址上。 請注意,類型轉換非常重要,否則我們會在地址中添加兩個struct node
的大小; 添加到指針的效果取決於指針類型。num.c
的地址相同。 在那個地址,我們找到了整數值 6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.