簡體   English   中英

將一個結構指針設置為等於另一個結構的地址

[英]Setting a struct pointer to equal the address of another struct

我正在嘗試將ptr設置為指向結構數組中的第一個元素,以便當我返回主函數時,我會感到困惑(這是為什么我不能在主函數中使用vArray [0]的原因) )。

盡管有了此代碼,它僅允許我訪問alg函數中的structs成員。 一旦返回到main,其所有元素現在都為null。 (我認為這與按值傳遞/按引用傳遞問題有關)。 有任何解決這個問題的方法嗎?

void alg(struct vars v[], struct vars *ptr)
{
   ptr = &vars[0];
   printf("%s", ptr->value); //this works here
}


int main()
{
   struct vars vArray[100]; //this has been filled earlier in the code
   struct vars *ptr;
   alg(vArray, ptr);
   printf("%s", ptr->value); //but now this returns null here
}

您需要“需要指向指針的指針”以反映主函數中函數alg()的更改。

這樣做:

void alg(struct vars v[], struct vars **ptr)
{
   (*ptr) = &vars[0];
   printf("%s", (*ptr)->value); //this works here
}

並將函數main調用為: alg(vArray, &ptr);

注意:兩個ptr在主及ptr在功能ALG()是兩個不同的變量。

順便說一句,出於學習目的,最好編寫函數,否則您可以像下面這樣簡單地在一行中完成: struct vars *ptr = vArray; 注意數組名稱會衰減為該表達式中第一個元素的地址。

您必須閱讀有關pointer to pointer

檢查此代碼:

#include <stdio.h>
#include <stdlib.h>

struct vars {
    int data;
};

void alg(struct vars *v, struct vars **ptr);

int main()
{
   struct vars *ptr;
   struct vars vArray;
   vArray.data = 10;

   alg(&vArray, &ptr);
   printf("main : %d\n", ptr->data); 
}

void alg(struct vars *v, struct vars **ptr)
{
   *ptr = v;
   printf("fun : %d\n", (*ptr)->data); 
}

輸出:

fun : 10
main : 10

總之使用雙指針可以解決您的問題

暫無
暫無

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

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