繁体   English   中英

有人可以告诉我这是怎么工作的吗? (C程序设计)

[英]Can someone tell me how does this work ? (C programming)

int m, n, j;
n=16;
j=15;
m = n++ -j+10;
printf("%d", m);

输出:11。

在这里,首先,将n的旧值赋予m ,然后将其递增,以使新值i get为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

我的建议是, 除非您完全确定自己在写什么,否则不要写复杂的表达式。

您那里有些错误。

  1. n++将递增n并返回原始结果,因此您得到了m = 16 ...

  2. -j所以m = 16 - 15 ... -j m = 16 - 15 ...

  3. +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);

实际上,后递增运算是在运算后的n上完成的……您有16-15 + 10 = 11,但如果打印n则应该有17。

首先,您可以阅读一些基础知识,但是这个示例并不简单; 它包括可能很棘手的运算符优先级。

开始简单...用c编写不可读的代码非常简单。 http://www.cs.cf.ac.uk/Dave/C/node4.html

希望能帮助到你

在表达式中m = n++ -j+10;
编译器将表达式视为m= n++ ((-j)+10)
由于n和j的初始值分别为n = 16j = 15 我们有m = 16++ ((-15)+10) 我们得到的输出为11
执行表达式后, n将递增。

n++首先返回的值n然后递增它。
因此,实际发生的计算是m = 16 - 15 + 10 ,即11

我想你想要的是:

m = (n+1) - (j+10);

使用++运算符的目的是在使用n的当前值来计算m后增加n的值以供将来使用。

对于m ,首先计算n - j + 10并将其分配给m 之后,执行n++

最后n = 17m = 11

您正在做出两种错误的解释。

首先,如其他答案所示,在对整个表达式求值之后, n++仅递增n

其次,您有-j+10 这不等于-(j+10) ,所以说j+1025且您正在寻找something - 25是错误的。 另一种查看-j+1010-j

在回答有关一本好书的问题时,您可能想考虑学习C ++而不是普通的C语言,因为C ++是C的超集。对于C ++,您需要获得Bjarne Stroustrup的“ The C ++ Programming Language”。 它很容易阅读,可以在您的书架上长时间保存,作为一个很好的参考。

n的值在以m结尾的表达式中使用后, n递增。

n++后递增 这样做之后,它只会递增n的值: m = n++ -j+10;

++n是预递增。 在计算m之前,它会增加n的值。 m = ++n -j+10;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM