簡體   English   中英

結構體和指針的作用

[英]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 = &num;
   printf("%d\n", *ptr);
   printf("%d\n", *((int*)ptr + 1 + (3-2)));

    return 0;
}

結果打印36 ,我得到了正確的答案,但我不確定我是否正確理解了struct 語句指針函數

以下步驟是我如何理解代碼的工作原理。

  1. 由於struct node ,num 3, 5, 6 被設置為num變量中的a, b, c

  2. *ptr指向 num 的首地址,因為struct node *ptr = &num; 這意味着它指向這是該指數= 0的地址3在{3,5,6}。

  3. 因此, printf("%d\\n", *ptr); 打印3 ,

  4. printf("%d\\n", *((int*)ptr + 1 + (3-2))); 正在打印 * (0+1+1)這是num index = 2 ,等於6

這是正確的嗎?

是的,但請允許我調整您的術語。 特別是,使用短語“索引”對我來說似乎有點不對勁,因為我們不是在談論數組。 我還將打破您的第 4 點,以更明確地說明那里發生的事情。

  1. 由於初始化的原因,在num變量中將3、5、6設置為a、b、c。
  2. ptr指向 num 的起始地址,因為struct node *ptr = &num; ,與num.a的地址相同。
  3. 因此, printf("%d\\n", *ptr); 打印 3。
  4. (int*)ptr產生一個指向num.a的指針,具有正確的類型。
  5. ptr加 2 意味着我們將兩個 int 的大小加到地址上。 請注意,類型轉換非常重要,否則我們會在地址中添加兩個struct node的大小; 添加到指針的效果取決於指針類型。
  6. 結果地址與num.c的地址相同。 在那個地址,我們找到了整數值 6。

暫無
暫無

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

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