c - 在此片段中,内存分配有帮助吗?我认为它被 *tmpl 覆盖了?

标签 c pointers

static Token *make_token(Token *tmpl) {
    Token *r = malloc(sizeof(Token));
    *r = *tmpl;
    r->hideset = NULL;
    File *f = current_file();
    r->file = f;
    r->line = pos.line;
    r->column = pos.column;
    r->count = f->ntok++;
    return r;
}

它们将内存分配给*r。然后他们将其等同于 *tmpl。我假设分配内存的位置被覆盖了?请解释一下。

最佳答案

困惑来自于声明指针的语法 Token *r = malloc(sizeof(Token)); 与取消引用指针的语法 (*r) 相匹配。第一行实际上意味着它初始化一个指向名为 rToken 的指针,并且相当于 Token* r,而第二行取消引用r 指向的空间并修改它。因此,完整的代码采用一个指向结构的指针,将该结构复制到通过 malloc 创建的新内存中,并对其执行操作 - 指针在任何时候都不是 r 。分配后仅更改其指向的数据。

请注意,如果 tmplNULL,则此代码的行为未定义。

关于c - 在此片段中,内存分配有帮助吗?我认为它被 *tmpl 覆盖了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211577/

相关文章:

c++ - 在不访问任何数据的 NULL 指针上调用方法是否会失败?

C 程序 - 执行 - while 循环不起作用

c - 如何在 XCODE 5 中使用 CUDA 6.0

c - 如何通过管道在外部程序中使用 STDIN 数据

c - 打印数组的元素,直到 C 编程中指定的键

c - 声明和释放二维动态数组和结构数组

c++ - const char* 是字符串还是指针

c - c 中结构位值的问题

c - 为什么声明 unsigned char "Volatile"会使其与 "non-volatile"unsigned char 不兼容?

c - 保存指针的内存地址