C --*--指针操作?

C --*--指针操作?,c,pointers,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 pri

在下面的节目中,

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。您原来的数组中有一个“r”,但它已被一个“q”取代。代码运行后,整个阵列看起来如下所示:

"azmque"

存储的值实际上已更改,因此当您第二次引用数组的第四个元素时(也称为
*ptr
a[3]
),该位置的值为“q”。

我希望这不是生产代码@JonathanGrynspan,这不是生产代码。只有学习目的。@Jeyaram你从中学到了什么?如何在模糊C常量中获胜?@Aniket,只是学习指针的基本知识:)不要在单个语句中混合前缀/后缀运算符。即使定义明确(并不总是如此!),它们也很难阅读。