1

次のプログラムでは、

int main()
   {

     char a[] = "azmruf";
     char *ptr = a;

     ptr += 5;  

     //Now ptr points at 'f'

     printf("%c", --*ptr--); //e got printed. Bcos of post increment now ptr in u.
     printf("%c", *ptr);     // so 'u' got printed now.

     // Next --*--ptr becomes --*(--ptr), 
     // ptr is moved to r, then --r i.e q is printed, but pointer should 
     // be in 'r'   
     printf("%c", --*--ptr);

     //Im here getting 'q' only instead of 'r'. There is no 'q' in my string.(??!!!)
     printf("%c", *ptr);        

     return 0;
   }

最後のprintf()で「q」を取得するにはどうすればよいですか??

4

1 に答える 1

3

デクリメント演算子には、非常に重要な副作用があります。つまり、格納されている値を 1 減らします。元の配列には「r」が含まれていましたが、「q」に置き換えられました。コードを実行すると、配列全体は次のようになります。

"azmque"

格納された値は実際には変更されているため、配列の 4 番目の要素を 2 回参照すると (別名*ptrまたはa[3])、その位置の値は「q」になります。

于 2013-02-15T05:27:20.633 に答える