gpt4 book ai didi

c - 返回值时赋值

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:45 24 4
gpt4 key购买 nike

我不理解我的同事使用的功能。他不能他正在使用奇怪的返回 block 。

block_t *get_block(void *p)
{
char *tmp;
tmp = p;
return (p = tmp -= 16);
}

他说应该返回表格和地址。

需要一些帮助来理解返回!非常感谢:)

最佳答案

所有 C 运算符都计算值(以 void 作为目标类型的强制转换运算符或对返回 void 的函数的函数调用除外)。特别是,赋值和 op/assignment 操作评估为分配的值。因此,这个声明:

    return (p = tmp -= 16);

相当于

    tmp -= 16;
p = tmp;
return p;

而后者正是会写的,如果那是我想做的。将所有内容压缩到一个表达式中会使代码更难被人阅读和理解,并且不会传达任何抵消优势。

但是,您的具体情况更糟。在您的情况下, ptmp 是函数的局部变量,因此对它们的赋值对调用者没有影响。因此,如果 p 之后不会被读回(从 p 中),则没有必要将新值分配给 p。这可能反射(reflect)也可能不反射(reflect)编程错误。如果函数的实际行为是正确的,那么我会以不同的方式编写整个函数:

block_t *get_block(void *p) {
return (block_t *) (((char *) p) - 16);
}

关于c - 返回值时赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54443594/

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