-1

誰かこの関数を書いてください

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% の精度.

4

3 に答える 3

2

C の演算子の優先順位によると、++が最初に評価され、次に が評価され*ます。したがって*p++ptrはその値をインクリメントして取得し、ステートメントptrは現在指している対象の値を取得します。もちろん、ptr++ステートメントの値を使用していないため、これは と違いはありません。

于 2010-06-24T13:07:46.340 に答える
2

++ は * よりも優先されます。しかし、私は同意します。同じステートメントで両方を混在させる場合は不明です。

于 2010-06-24T13:07:03.330 に答える
1

++、--、+= などを他の演算子と混ぜて使用する人は、読み取り可能なコードを書くことにすでに失敗しています。

于 2010-06-24T13:11:57.313 に答える