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

减量运算符有一个非常重要的副作用。即,它将存储的值减少一。您的原始数组中有一个“r”,但已被“q”取代。代码运行后,整个数组如下所示:

"azmque"

存储的值实际上发生了变化,因此当您第二次引用数组的第四个元素(又名*ptror a[3])时,该位置的值是“q”。

于 2013-02-15T05:27:20.633 回答