【问题标题】:how is the expression in the function below evaluated?如何评估以下函数中的表达式?
【发布时间】:2015-03-01 10:06:17
【问题描述】:
//function to copy string t to string s using pointers
void strcpy(char *s,char *t)
{
    while((*s++=*t++)!='\0');
    return;
}

我很困惑表达式 *s++==*t++ 是如何评估的。我知道增量运算符的关联性高于赋值运算符。

【问题讨论】:

  • 感谢 Arjun Sreedharan 解决了我的疑问。
  • @EdHeal 在这段代码中没有任何“糟糕”的地方。这是理解 C 字符串和指针的初学者代码,没关系
  • @EdHeal 实际上它确实复制了空字符。与此类似的代码出现在 K&R 中,也许你可以给 Brian Kernighan 发电子邮件,让他知道他是个垃圾编码器
  • 他不是神。这是垃圾代码,因为它在一行代码中做了很多思考。我和海报,很难调试。我厌倦了试图变得聪明并使用书中所有技巧的程序员。不会产生可维护的代码

标签: c function


【解决方案1】:

*s++=*t++ 基本上就是

*s = *t;
s++;
t++;

【讨论】:

  • 就程序员逻辑而言。程序集可能不同
【解决方案2】:

*s++=*t++ 暗示;必须评估 *s*t 以生成变量(左值),并且在此过程中使用 st 的原始值(即,st 的值在递增之前)。 *t 必须在 s 递增之前分配。

请注意,分配后不一定会发生增量。相反,必须使用原始值。只要使用原始值,增量就可以随时发生。

还需要注意的是,后自增++出现在变量之后并不意味着在赋值之后会发生自增。

推荐阅读:Incrementing Pointers, Exact Sequence.

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-08-09
    • 2021-03-28
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多