有人写这个函数
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分享这个,例如:
字符 s[6]="你好";
它会做什么?
*++ptr;
这将评估 ++ 预增量(在指针上),然后是取消引用运算符 *,因此它将让一个 char 值 'e'(“hello”的第二个字母)(在这种情况下不使用并且可以生成编译警告)并且指针将指向“e”(位置 1)
它会做什么?
*ptr++;
这有点奇怪,因为它会首先评估取消引用运算符 *,所以它会让一个 char 值 'h' (在这种情况下都没有使用),然后是 ++ 后增量(到指针),所以(再次)指针将从“e”(位置 1)指向
它会做什么?
ptr++;
最后它不会有 char 的左值,但如果不使用它不会产生任何警告,并且指针也会从 'e'(位置 1)指向。
从指针地址的角度来看,这三种形式的作用相同。
恕我直言,这是某些计算机语言(几乎所有人)中最糟糕的事情。
“任何代码和任何错误之间的汉明距离都很差”
我们在编程时没有冗余,如果你拿一本法律书,在里面写随机字符,它是可读的,但是如果你在编程时输入随机,你会得到一个错误,100% 准确