关于++i的疑惑
如果你指的是公司的话,那应该是能接受的,关键在于你的能力,能力强,业务好,给公司带来利益,公司当然会重用你,要不然研究生也没用。如果是对人的话,如女朋友的家长,个人觉得接受也没什么大问题。只要沟通好。毕竟你的这些证明,成绩都是自己努力所得,而且能取得这样成绩的比例应该还是比较少的。还是一句话,对自己要有自信。这样才能成功,才能让别人尊重和接受。
i+++i的意思是 i + i (此时i=1)
然后再i++
所以 i=2, j=2
i++是指先做完别的事再自身++
而++i是指先自身++,再做别的事
不信你试试++i+i,一楼说的“++的优先级高“
不完全对,二楼说的没错。嘿嘿,握个手吧。
英雄所见略同。给分吧。
补充:
j=i+++i+++i+++i+++i+++i是一个道理。
1. i++之前i=1所以把i++看作i
j=i+i+i+i+i+i=6
2. 计算完1.之后该执行i++
你自己数数有几个i++,5个对吧。
i=1,执行5次i++,i=6
你要是还不明白,就把电脑砸了吧。
前加等效于以下的函数
int& preAdd(int& num)
{
num += 1;
return num;
}
后加等于以下的函数
int sufAdd(int& num)
{
int newN = num;
++num;
return newN;
}
其它的事情就很简单了。唯一要注意的是前加返回是引用类型,而不是简单的值类型。这就是为什么第一个结果是10 (5 + 5)的原因。
++这个符号本身就有很多陷阱,建议在使用时避免两次重复使用(这样结果就是未知的)
i++先运算,后自增
++i先自增,后运算
解释:
i初值是3
(++i)+(++i)
表达式里两次前缀++
所以变量i自身做了两次+1运算值变为5
++i返回的值就是i自加两次1以后的值5
(++i)+(++i)
两个5相加
结果是10
编译以后的汇编
mov eax,3 ; i = 3
inc eax ; i自身+1
inc eax ; i自身+1
add eax,eax ; i+i存到i里
结果16 ,还是把你那里编译生成的汇编拿来看一下吧
看过汇编真相就会大白。
m=(++i)+(++i);的结果就是10,原因:前面的公式首先执行的的括号中的++i,这样会执行两个,i变为5了,然后才进行的加法运算。
m=(++i)+(++i)+(++i);这个的结果就是18,可以测试一下。
带括号优先级高
C语言 一个循环输出两个数组疑惑
下面是个例子 不知道是否可行#include <iostream> using namespace std;void main(){ double a[8]={0,1,2,3,4,5,6,7};double b[8]={0,1,2,3,4,5,6,7};for (int i=0;i<16;++i){ if(i<8)cout<<a[i]<<" ";if(8==i)cout<<endl;if(i>=8)cout<<b[i]<<" ";...
...i=0;string str; while(cin>>str) { ++i;}这个while循环什么时候结...
在 C++Primer 中,作者经常使用 while(cin>>word) 类似的语法,但是如何结束,可能会出现疑惑。有的时候需要两次快捷键才能结束循环,有的时候却只需要一次循环。在 Unix 系统中的实际的现象为:当输入为“字符串,回车,Ctrl+D”的时候,跳出循环;当输入为“字符串,Ctrl+D,回车”的时候,不会跳...
如何用自增运算符的结合性来分析i+++j?
执行后置自增运算符,将 i 的值增加 1。此时,i 的值变为 i+2。首先需要指出,您提到的“自增运算符是从右往左结合的”并不准确。自增运算符(++)的结合性与其他运算符不同,它有两种结合性:前置结合性和后置结合性。前置结合性指的是前置自增运算符(++i)的结合性,即在同一个表达式中...
c++中++前缀和后缀有什么区别
而后置则返回加之前的值。编译器行为的区别 :后置的时候为了能够返回加之前的值,编译器会给你构造一个临时变量用于参与整个表达式,编译器无法先计算整个表达式,再对这里二次计算一下,所以在一些情况下:比如该变量类型的构造会产生性能问题的时候,要适当考虑,比如独立的++i和i++,一些静态检查。
...i=0,j=3; while(i<=3&&j>2) { printf("%d,%d\\n",i,j); j=3-i++...
i++是一个表达式,它的值等于没有变化前的i ++i的值等于变化后的i 比如 i = 0 那么 (i++) = 0 (++i) = 1 所以:j=3-i++; 是先计算x=i++=0 但是i已经为1了 再计算j=3-x=3 这样就出来你所写的结果了。你是理解成了i++等于i变化后的值,所以有上面的疑惑 ...
JNI中实现类似C++回调方法-结构体操作
i, objmodel); } 以上就是粗略的赋值流程了,针对于2操作,我们进行具体的代码展示吧!操作2.1:将id数据设置到objmodel对象中第一步:string转成jstring类型 jstring jsId = mJni->NewStringUTF(stInfo.id.c_str());第二步:存储到objmodel对象中 mJni->CallVoidMethod(objmodel, method_id, j...
在C语言中定义n=6,为什么-6++输出的结果是-6,而不是-7?
-6++,加下去 应该 是 相当于 n=n+1;你只输一次,++i和i++是不同的!你循环几次就知道它是怎么算的了!我循环了8次!
Visual C++中二级指针的定义,初始化,赋值问题
i]来访问字符串了呢,的确编译器在编译的时候识别出了sp是一个指向一维数组的指针的指针,那么我们就可以把它做为数组名来操纵整个数组了,c神奇的地方或者说精华的地方就在这里了,希望这篇文章对那些对指针或二级指针有疑惑的朋友能够有所帮助,这也是我blog里的第一篇文章,呵呵....
一个c语言的疑惑
两种方法:1、定义数组时,将字符数组各元素都赋初始值为空字符,'\\0'char str[200]={'\\0'};2、当不赋初始值时,需要取得字符数组的长度,并将后面的一个元素赋值为空字符。int n;char str[200];gets(str);n=strlen(str);str[n]='\\0';两种方法的实质意义相同,都是保证字符串数组在输入...
C#中中的疑惑
如果sum没有初始化他会累加之前一个班的成绩,这就是为什么在里面初始化的原因。当然你在外面也可以初始化。但是这个程序里面没有那个必要。static void Main(string[] args){ int sum=0;\/\/也可以 for (int i = 0; i < 3; i++){ sum = 0;Console.WriteLine("请输入第{0}班级成绩", i...