3

Web からソース コードを入手しましたが、1 行が曖昧です。私は機能を持っています:

double dict(const char *str1, const char *str2) {

この関数の行は次のようになります。

if (strlen(str1) != 0 && strlen(str2) != 0)
    while (prefix_length < 3 && equal(*str1++, *str2++)) prefix_length++;

演算子 ++ は *str1++ と *str2++ で何をしますか?

4

4 に答える 4

6

++演算子 inは*str++、ポインターをインクリメントします (ポイントされたものではありません)。

(*str)++;   /* Increment the character pointed at by str */
 *str++;    /* Increment the pointer in str */
*(str++);   /* Increment the pointer in str - the same, but verbose */

2 つの非常に異なる操作が示されています (そのうちの 1 つは、2 つの異なるが同等の表記法を使用して示されています) が、どちらもstrインクリメントが発生する前にポイントされた文字を返します。これは、標準の優先順位規則の結果です — のような置演算子は、これを変更するために括弧が使用されない限り、のような単項 (前置) 演算子++よりも優先されます。*

于 2013-07-18T04:02:39.040 に答える
2

に読み書きするときは*str1++、後置インクリメントの通常の規則が適用されます。あれは:

  1. ポインタは次のアドレスにインクリメントされます
  2. 前のポインタ値が返されます

その段階で、ポインター値 (インクリメントする前の値) を逆参照し、それが指す値を使用します。

于 2013-07-18T04:03:38.827 に答える
1

*str1++最初に を使用してvalue pointed by str1からインクリメントすることを意味しますstr1

char arr[] = "meow";
char ch;

char *str = arr;

ch = *str++;    // ch = *(str++) both does same

さて、上記のステートメントを実行した後、

  1. chが含まれます'm'
  2. strのアドレスを指しますarr[1]
于 2013-07-18T04:01:44.933 に答える