誰かこの関数を書いてください
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]="こんにちは";
それは何をしますか?
*++ptr;
これは ++ プリインクリメント (ポインター上) を評価し、次に逆参照演算子 * を評価するため、char 値 'e' ("hello" の 2 番目の文字) が返されます (この場合は使用されず、生成される可能性がありますコンパイル時の警告)、ポインターは 'e' (位置 1) から指します。
それは何をしますか?
*ptr++;
これは、逆参照演算子 * を最初に評価するため、少し奇妙です。したがって、char 値 'h' (この場合はどちらも使用されません) を許可し、次に ++ ポストインクリメント (ポインターへ) を許可します。 (再び)ポインターは「e」(位置1)から指します
それは何をしますか?
ptr++;
最後に、char の左辺値はありませんが、使用されていない場合は警告を生成せず、ポインターも「e」(位置 1) からポイントします。
これら 3 つの形式は、ポインター アドレスの観点からは同じことを行います。
IMHO それは一部のコンピューター言語 (ほとんどすべての人) の最悪のことです..
「コードとバグの間にはハミング距離がありません」
プログラミングに冗長性はありません. 法律の本を手に取り, その中にランダムな文字を書き込めば, 読めるようになりますが, プログラミング時にランダムに入力するとバグが発生します. 100% の精度.