有人写这个功能

void strToUpper(char *p) {
  while (*p) {
    *p = TOUPPER(*p);
    *p++;                //<-- Line to pay attention
  }
}

我问,为什么要把 *放在p ++之前?

答:因为“它是相同的”,所以我纠正了代码,然后生气了一段时间,因为两者都确实有效...

void strToUpper(char *p) {
  while (*p) {
    *p = TOUPPER(*p);
    p++;                //<-- Line to pay attention
  }
}

因此,我想与stackoverflow分享,例如:

char s [6] =“ Hello”;

它会做什么?

*++ptr;

这将评估++的预入(在指针上),然后评估删除操作员 *,因此它将让char值'e'(“ Hello”的第二个字母)(在这种情况下不使用,可以生成关于编译的警告),指针将从“ E”指向(位置1)

它会做什么?

*ptr++;

这有点奇怪,因为它将首先评估解雇操作员 *,因此它将让char值'h'(在这种情况下既不使用),然后再用++后插入后(指向指针),所以(再次)指针将从“ E”指向(位置1)

它会做什么?

ptr++;

最后,它不会有char的lvalue,但是如果不使用,它不会产生任何警告,并且指针也将从“ e”(位置1)指向。

这三种形式从指针地址的角度来做相同。

恕我直言,这是某些计算机语言中最糟糕的事情(几乎所有人)。

“任何代码和任何错误之间的锤击距离都很差”

编程时我们没有任何冗余,如果您拿一本法律书并在其中编写随机字符,它将是可读的,但是如果您在编程时键入随机,则会获得错误,100%准确性

有帮助吗?

解决方案

++具有优先 *。但是我同意,目前尚不清楚您在同一陈述中混合时。

其他提示

根据C的操作员优先级 ++ 将首先评估,只有这样 *. 。所以 *p++, ptr 将使其价值分开,然后该语句将获得opbject的值 ptr 现在指的是。当然,这与 ptr++, ,因为您不使用语句的值。

任何将++, - , +=等混合的人已经失败了编写可读代码,他们会把它弄出来的事实不过是他们的到期。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top