- * - 指针操作?

时间:2013-02-15 05:21:35

标签: c pointers

在以下计划中,

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'?

1 个答案:

答案 0 :(得分:3)

减量运算符具有非常重要的副作用。即,它减少了一个存储的值。你原来的阵列有一个' r'在其中,但已被“q”取代。代码运行后,整个数组看起来像:

"azmque"

存储的值实际上已更改,因此当您第二次引用数组的第四个元素(又名*ptra[3])时,该位置的值为' q&#39 ;