0

私は C に慣れていないので、以下の 2 つのスニペット コードの違いを知りたいです。

        printf("%c\n",*strptr++);

        printf("%c\n",*(strptr+i));

これが以下のコードです。

#include<stdio.h>

int main(void)
{
        char str[100]="My name is Vutukuri";
        int i=0;
        char *strptr;

        strptr=str;

        while(*strptr != '\0')
        {
                printf("%c\n",*strptr++);
                //printf("%c\n",*(strptr+i));
                //i++;
        }
        return 0;
}
4

3 に答える 3

3

全然違う。

最初のスニペットは文字を出力し、 1strptrずつインクリメントstrptrします。

2 番目のスニペットは、文字を に出力しstrptr + iます。

于 2012-04-25T21:33:21.683 に答える
2

どうやら、アドレスstrptrはメモリ内の割り当てられた場所を参照し、割り当てられstrptr + iていない場所を指しています。文字列を次のように割り当てる場合

char s[LENGTH];

また

char* s = (char*)malloc(LENGTH * sizeof(char));

s[0]その場合、からからからまでの文字のみを使用できますs[LENGTH - 1](文字列自体はLENGTH - 1長くすることしかできないため、null ターミネータの場所があります)。あなたの場合、ポインターstrptr + iはおそらく範囲内にありませんs...s + LENGTH - 1

于 2012-04-25T21:37:12.377 に答える
1

i を 1 に置き換えたいと思うかもしれません。

  • ++ 演算子は最初に初期値を使用し、次にそれをインクリメントします。
  • +operator は、新しい値を計算してから使用します。
于 2012-04-25T21:33:55.833 に答える