gpt4 book ai didi

c - 在C中使用函数获取指针中变量的地址

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:18 25 4
gpt4 key购买 nike

我有一个案例,我需要指针中变量的地址。该变量位于不同的文件中,因此我创建了一个函数并将其传递给一个指针。该函数将变量的地址分配给指针。
但是该变量的地址未在指针中更新。我的代码如下——

typedef struct
{
int* ptr;
} test;

int sGlobalVar = 10;
test GlobalStruct; //Create instance of struct


//This function address of Global variable to passed pointer
void GetAddress(int* ptr)
{
ptr = &sGlobalVar;
//Prints correct value
printf("Value of Global Variable in Function %d\n", *ptr);
}


int main()
{

printf("Hello World!!");
GetAddress(GlobalStruct.ptr);

// CODE CRASHES HERE. Because GlobalStruct.ptr is NULL
printf("Value of Global Variable in Main %d \n", *GlobalStruct.ptr);

return 0;
}

接下来我做的是修改我的函数 GetAddress() 以便它接受指向指针的指针。

//This function address of Global variable to passed pointer
void GetAddress(int** ptr)
{
*ptr = &sGlobalVar;
//Prints correct value
printf("Value of Global Variable in Function %d\n", **ptr);
}

和主要作为

 int main()
{

printf("Hello World!!");
GetAddress(&GlobalStruct.ptr);

//Now Value prints properly!!
printf("Value of Global Variable in Main %d \n", *GlobalStruct.ptr);

return 0;
}

我不知道为什么第一种方法不起作用。

最佳答案

第一种方法不起作用,因为您是按值传递指针并更新它。在第二种方法中,您通过引用传递它,因此更新后的值会保留。

简单来说,当你做值传递时,调用者和被调用者有两个不同的变量副本,所以被调用者更新的数据不会反射(reflect)在调用者身上。而在按引用传递中,情况并非如此,更新的数据反射(reflect)在调用者中。

关于c - 在C中使用函数获取指针中变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com