c - 将结构指针设置为等于另一个结构的地址

标签 c pointers struct

我正在尝试将 ptr 设置为指向结构数组中的第一个元素,这样当我返回到我的主要函数时,我可以搞砸它(这就是我不能使用 vArray[0] 的原因)主要)。

虽然使用这段代码,它只允许我访问 alg 函数中的结构成员。一旦它返回到 main,它的所有元素现在都为空。 (我认为它与按值传递/按引用传递问题有关)。有什么办法可以解决这个问题吗?

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
}

最佳答案

你需要"Need of Pointer to pointer"以反射(reflect) main 函数中函数 alg() 的变化。

这样做:

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

调用函数 main 为:alg(vArray, &ptr);

注意:main 中的ptr 和函数alg() 中的ptr 是两个不同的变量。

顺便说一句,出于学习目的,最好编写函数,否则您可以简单地在一行中完成:struct vars *ptr = vArray;。请注意,数组名称衰减为此表达式中第一个元素的地址。

关于c - 将结构指针设置为等于另一个结构的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166994/

相关文章:

c++ - 类破坏段错误

c - 为什么将 const 值分配给指针时出现可疑指针转换警告?

c++ - 指针和指针的地址如何共享相同的内存地址?

c - 二进制表达式 ('struct node ' 和 'struct node ' 的无效操作数)

将结构成员复制到数组

c - char 逐字符读取文件,numbers 设置数字

c# - 返回两个值,元组 vs 'out' vs 'struct'

C - 使用 fwrite 在其他结构数组中创建一个结构数组的 bin 文件

c - C 语言的基本插入排序算法(TDM-GCC 编译器)

比较字符与字符串 C