int m, n, j;
n=16;
j=15;
m = n++ -j+10;
printf("%d", m);
输出:11.有人能告诉我这是如何工作的? (C编程)
在这里,第一,n
旧值被提供给m
,然后它被递增,以便新的值i得到的是17,然后将表达得以解决,即j+10
= 25,那么n的新值减去25即17-25。 对吗?但答案与输出11
不匹配。 那么这是如何工作的? 另外,我是编程新手,并开始学习C.你认为哪本书最适合我?由于我没有编程经验。 谢谢。
int m, n, j;
n=16;
j=15;
m = n++ -j+10;
printf("%d", m);
输出:11.有人能告诉我这是如何工作的? (C编程)
在这里,第一,n
旧值被提供给m
,然后它被递增,以便新的值i得到的是17,然后将表达得以解决,即j+10
= 25,那么n的新值减去25即17-25。 对吗?但答案与输出11
不匹配。 那么这是如何工作的? 另外,我是编程新手,并开始学习C.你认为哪本书最适合我?由于我没有编程经验。 谢谢。
m = n++ -j+10;
是相同
m = n -j+10;
n = n + 1; // m is 11.
如果是++n
这将是
n = n + 1;
m = n -j+10; //m is 12.
那么表达式得以解决,即J + 10 = 25
号这将是-j+10
= -5
我的建议是,不要编写复杂的表达式,除非你完全确定你在写什么。
我明白了。帮助很多。谢谢。 – 912M0FR34K
n++
首先返回n
的值,然后递增它。
因此,所发生的实际计算是m = 16 - 15 + 10
这是11
我想你想要的是:
m = (n+1) - (j+10);
使用++
操作是递增的n
的价值后,将来使用您使用它的当前值来计算m
。
但增量在哪里? 'n = 16'和'j = 15'的值。那么在这里使用'++'是什么? – 912M0FR34K
n ++增加n不是m,如果你打印n的值,你会看到它是17 – yurib
我明白了。帮助很多。谢谢。 – 912M0FR34K
n
递增后其值在m
结束的表达式中使用。
你在这里有一些错误。
n++
将增加n
并返回原来的结果,这样的话你有m = 16 ...
。
-j
所以你有m = 16 - 15 ...
。
+10
所以你有m = 16 - 15 + 10
。
现在我最后一次做数学,会出现m = 11
像你所看到的。
如果你希望它是m = 17 - (15 + 10)
然后你想:
int m, n, j;
n=16;
j=15;
m = ++n -(j+10);
printf("%d", m);
我明白了。帮助很多。谢谢。 – 912M0FR34K
n++
是后增量。它只会在执行后递增n
的值:m = n++ -j+10;
++n
是预增量。在计算m之前,它递增n
的值。 m = ++n -j+10;
你正在作出两个不正确的解释。
首先,如其他答案所示,n++
只在整个表达式被评估后才增加n
。其次,你有-j+10
。这不等于-(j+10)
,所以说j+10
是25
并且您正在寻找something - 25
是错误的。另一种查看方式-j+10
是10-j
。
我明白了。帮助很多。谢谢。 – 912M0FR34K
在回答关于一本好书的问题时,您可能会考虑学习C++而不是简单的旧C,因为C++是C的超集。对于C++,您需要获得Bjarne Stroustrup的“The C++ Programming Language ”。很容易阅读,并且在您的书架上可以持续很长时间作为一个很好的参考。
其实算后增量操作的操作,其n做... 你有16-15 + 10 = 11 但如果打印n您应该有17
开始,你可以阅读一些关于基础知识的书,但这个例子并不简单;它包括操作符的优先级,这可能会很棘手。
开始简单...在c中编写不可读代码非常简单。 http://www.cs.cf.ac.uk/Dave/C/node4.html
希望它有助于
我明白了。帮助很多。谢谢。 – 912M0FR34K
在表达式m = n++ -j+10;
编译器将表达式视为m= n++ ((-j)+10)
作为n和j的intialized值n = 16
和j = 15
。我们有m = 16++ ((-15)+10)
。我们得到的输出为11
。
表达式执行后n
将递增。
除非右边的完整计算(这就是为什么我们谈论R值,R代表正确)已经完成,否则没有值被赋值给m。这里m是L值(左边的L)。 – zaphod1984
'm'是'16-15 + 10',因为'n ++ == 16'。 – Gandaro