在以下计划中,
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'?
答案 0 :(得分:3)
减量运算符具有非常重要的副作用。即,它减少了一个存储的值。你原来的阵列有一个' r'在其中,但已被“q”取代。代码运行后,整个数组看起来像:
"azmque"
存储的值实际上已更改,因此当您第二次引用数组的第四个元素(又名*ptr
或a[3]
)时,该位置的值为' q&#39 ;