繁体   English   中英

将结构传递给 function 调用不起作用

[英]Passing struct to function call doesn't work

由于 C 不支持按引用传递,并且我正在开发一些不能使用堆 memory 的东西,我该如何使它工作? 我希望 function 调用 set_var_name 来实际更改变量 global_log 而不仅仅是本地副本。 谢谢

#include <stdio.h>
struct Record 
{ 
    char type[1];
    char var_name[1014];
    void* var_address;
    char is_out_dated[1];
}; 

struct Global_Log
{
    struct Record records[1024];
    int next_slot;
};

void set_var_name(struct Global_Log global_log, int next_slot, char* data, int size)
{
    for(int i = 0 ; i < size; i++)
        global_log.records[0].var_name[i] = data[i];
    printf("%s\n",global_log.records[0].var_name);//here prints out "hello"
}

int main()
{
    struct Global_Log global_log;
    char a[6] = "hello";
    set_var_name(global_log, 0, a, 6);
    printf("%s\n",global_log.records[0].var_name); // here prints out nothing
    return 0;
}

您似乎正在使用 struct 实例的副本,而不是引用。 尝试将结构的指针作为参数传递,这样您就可以使用实例的引用:

void set_var_name(struct Global_Log* global_log, int next_slot, char* data, int size)

另一种选择是使用全局变量,因为听起来好像不会有它的另一个实例。

C 是一种按值调用的语言 - 当您调用 function 时,所有 arguments 都是按值传递的(即,副本是通过引用传递到被调用方的范围内)。 因此,对 function 中的 arguments 的任何更改只会影响被调用的 function 中的副本。

如果你想调用“通过引用”,你需要通过传递一个指针并在被调用的 function 中取消引用来显式地完成它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM