[英]Setting a pointer to struct to equal to another pointer to struct returned by a function?
[英]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.