2 jiexuyin0784 jiexuyin0784 于 2017.09.09 00:19 提问

c++关于指针和++小题求解

void func(int* n)
{
//cout << (*n--);
while ((*n)--);
printf("%d", ++(*n));
}

int main()
{
int a = 10;
func(&a);
system("pause");
}
为什么输出结果为0?这个和前置++后置++,运算符优先级有关吗?

3个回答

qq_38204686
qq_38204686   2017.09.09 08:45

有关
前置++ 先执行+1 可以说优先级比较高 后置++ 等一句话执行完 最后加一

--也一样
while 先判断*n 是否为0 是的话跳出循环 然后减一 (后置--) 不是的话也减一
跳出循环以后其值为-1 输出的时候前置++ 先加一后输出 所以得0
关键是分清 前置 和 后置的 区别

qq_38204686
qq_38204686 所以说 --n 和 n--不一样 n--就是最后才减的 编译器就是这么执行的
2 个月之前 回复
jiexuyin0784
jiexuyin0784 为啥会先判断*n ,再执行--呢?为什么不是先执行(*n)-- ,再判断呢?
2 个月之前 回复
jiexuyin0784
jiexuyin0784 谢谢了
2 个月之前 回复
cocos_yang
cocos_yang   2017.09.09 10:54

你把while后面的;去掉

cocos_yang
cocos_yang 跳出while循环时,的时候应该是while((n = 0)--),当while执行完后,n又自减为-1了,printf函数中是++n,n的值会先加1,然后才打印,-1加以就是0了;
2 个月之前 回复
jiexuyin0784
jiexuyin0784 这个题就是带;的
2 个月之前 回复
cocos_yang
cocos_yang   2017.09.09 10:59

还有就是printf("%d ", (*n) + 1);

Csdn user default icon
上传中...
上传图片
插入图片