这段C++代码为什么变量 i 到了13不继续 i ++而变成1呢?

作者&投稿:佴侵 (若有异议请与网页底部的电邮联系)
C++中,普通变量++i 返回的究竟是新 i 还是旧 i + 1 ?~

旧的i,你看了C++的重载运算符就知道原理了

你确定最后的结果是16?
我分析了一下,还是15啊
第一个括号里执行后i=4;
然后第二个括号i=5;
然后执行加法,值是9;
然后执行第三个括号里的,i=6;
最后执行第二个加法,值是15.
////////////////////////////////////////////////////////////////
这样的题目答案不是唯一的,也没有讨论的价值。
百度里搜sequence
point
引用:
Sequence
Point就是这么一个位置,在它之前所有的side
effect已经发生,在它之后的所有side
effect仍未开始,而两个Sequence
Point之间所有的表达式或者代码执行的顺序是未定义的!
而C++标准又进一步规定了Sequence
Point出现的5种情况:
1、
At
the
end
of
a
full
expression
.....
根据1:
int
i
=
3;
int
k
=
(++i)+(++i)+(++i);
两个语句分别是2个sp,(++i)+(++i)+(++i)发生在两个sp之间
所以任何一个(++i)被作为参与计算等式右边表达式的值的顺序是不确定的
举个例子
k
=
(++i);
k
+=
(++i);
k
+=
(++i);
这样的结果是15
或者
++i;
++i;
k
=
i
+
i;
k
+=
++i;
这样的结果是16
也有可能
++i;
++i;
++i;
k
=
i
+
i
+
i;
这样的结果是18

你的数组使用越界了。x[w]=1;就把ij变成了1。

#include<bits/stdc++.h>
using namespace std;
int main()
{ int r=10,x[11]= {0,0,0,0,0,0,0,0,0,0,1},w=0;
  for(int ij=1; ij<=1000; ij++)
  { w++;
    r=r+w;
    while(r>10)
    { r=r-10;
    }
    cout<<"w="<<w<<endl;
    x[w]=1;        //增加了这一行,明显可以看出毛病所在
    cout<<ij<<" "<<r<<" "<<w<<endl;
    for(int i=1; i<=10; i++)
    { cout<<i<<":"<<x[i]<<endl;
    }
    cin.get();
  }
}



下段c代码,输入任意字符为什么为什么输出4?
给你讲一下基本功吧,a是个数组,本来就来就表示一个地址,所以可以直接这样使用scanf("%s",a); %s代表字符串,%c代表字符,如果你说输入任意字符都输出4,哪么有可能你每次输入的时候,开头都是4,把printf("%c\\n",a); 中的%c改成%s试试。给个满意答案,谢谢 ...

c语言为什么我这段代码运行一次就退出?求大神
这样试试:include <stdio.h> char getfirst(void);int main(void){ char ch=' ';double dj,sj,sq,sh,shui;while(1){ printf("基本工资等级为:\\n");printf("输入a为8.75\\n");printf("输入b为9.33\\n");printf("输入c为10.00\\n");printf("输入d为11.20\\n");printf("输入f为...

这段c代码哪里错了?提示error C193: '': bad operand type
刚好我也遇到这个问题。bad operand type表示“操作数类型错误”pow(x,y); \/\/其作用是计算x的y次方。x、y及函数值都是double型 。你的n又是float类型。而%取余操作要求两边操作数均为整数,故报错在所难免。

c语言为什么我的这段代码添加数据后编号都是1而且名字一样的不能合...
看你贴的局部代码,你是动态申请结构数组变量ptemp保存读取的文件数据。而你打印结果同类型没有合并,说明在Material_warehousing这个函数的相同数据对比上出问题。函数没有能识别出已存在的物品名称。排除你输入物品名称输错,那么你问题就在这段:else\/\/若文件中存在记录{ for(i=0;i<f1\/size;i++)...

C语言这段代码为什么把%s换成%c会不对?
跟你大概说说%s和%c的实际运行中的差别:因为现在很少有RAW的终端(关于RAW和cooked,可以找些文章看看),对于标准输入,通常都是以<回车><换行>结束。也就是说:在遇到<回车><换行>之前,scanf()函数是不会结束的。对于%c的scanf(),则有些奇怪,那就是虽然“一个字符”就可以结束,但是实际遇到...

c语言入门 求平均值这段代码为什么输出结果不对呢?
是scanf函数的调用参数格式不对,需要修正。在手机上用易历知食软件里的微C程序设计来演示修正后的代码并运行程序,手机上代码如下图:手机上运行结果如下图:

一段C语言代码不知道错哪儿了,请高手指教
比较常见的运行时错误是在做除法运算时所产生的“除数为零”错误。如下列 VB 代码:Dim a As Double, b As Double, Result As Doublea = 100b = 0Result = a \/ b 该程序在语法上并没有错误,但是由于除数为 0 (b = 0),程序运行中,当执行到语句“Result = a \/ b”时, 就会产生一...

请帮看看这段 C 代码是什么意思,同样是“*p”为什么含义不同呢?_百度...
这里p是一个指向int型的一个指针,p=&i,这个时候p存储的是i的地址,那么*p就是取地址上的值,你可以把*号看作是取值符,*p=20意思是把p这个地址上存储的值改成了20,那么p存储的是i的地址,也就是说把i的值改成了20,然后j=*p,又取p上的值,赋给了j变量 ...

C语言:为什么这段代码一运行就出错?char *存储字符串有问题吗?_百度知 ...
char *c = "OPQ";这样的写法是指指针c是指向"OPQ"这个字符串常量的(注意是常量)strcat(c,d);这句又试图改变c指向的字符串(增加d指向的内容),这和c指向的是字符串常量是矛盾的,所以不允许.修改的的话,只要改变c就行:char c[100] = "OPQ";\/\/这样的定义表示c是一个字符数组,并且数组初始化...

帮我看看这段C的代码吧,为什么inverse这个函数中char变量要放在大括号外...
楼主的代码有点错误。忘记声明了。应该是这样的。include "stdio.h"void main(){void inverse(char str[]);char str[100];printf("please enter string:\\n");scanf("%s",str);inverse(str);printf("the outcoming string: %s\\n",str);} void inverse(char str[]) \/\/这里。。。{ char...

天全县15241321436: C++中,普通变量++i 返回的究竟是新 i 还是旧 i + 1 ? -
邸芸苯磺: 前置操作符返回值的引用,即i的引用,那么当然就是自增之后的值(因为是引用所以是左值)

天全县15241321436: C++一段求数列和的代码.为什么定义的double变量sum到最后输出的却是整数? -
邸芸苯磺: 因为i是整型数据,1/i输出的结果也是整型的,因而循环多次以后sum中的数都是整数相加,结果当然会输出整数了.若你想得到double类型的数只需将1/i改为1.0/i即可

天全县15241321436: c++ 为什么在类里定义了i,在main函数里面使用时编译却说没有定义 -
邸芸苯磺: 在类里定义了i,那你在main函数里使用要通过那个类的对象来调用啊. 追问: 是呀 可是每次编译都说我用的 变量 i 没定义 回答: 贴个代码看看 追问: #include<iostream> using namespace std; class Mok { public: void Input(int,int); void Us(int,...

天全县15241321436: 这段c++代码,不知道为什么老是提示使用了未初始化的变量,但是我已经初始化了那个变量啊,求教 -
邸芸苯磺: int digit;//初始化digit 这个叫定义,不叫初始化 digit=0; //这个才叫初始化

天全县15241321436: 请帮忙具体讲一下这段C++代码,初学者,谢谢了.比如第6行的作用. -
邸芸苯磺: 1连接库iostream2使用std命名空间3主函数4主函数开始5定义整型变量i,j,a6定义字符型变量c,并初始化为'y'7第一层repeat循环开始(先循环,后判断)8第二层repeat循环开始,输出“请输入菱形的边长”9读入a;换行;第二层repeat循环继续...

天全县15241321436: vs2010中调试c++代码, 执行完 int i= 0;后 i的值却不为了0,请问可能的原因是什么 -
邸芸苯磺: 可能是变量作用域的问题,你仔细检查下是不是还在其他地方定义了i;

天全县15241321436: c++中关于变量重复定义的问题.C++达人请进 -
邸芸苯磺: 那是因为c++中变量的生存周期是存在于块中的,while(1) {int i;} 这句中的i生存周期只存在于while循环中,出了循环i就不能使用了,所以这两个i不处于同一个内存空间

天全县15241321436: C++的变量为什么定义是要赋值? -
邸芸苯磺: 一般来说,变量要赋初始值,这是一个好习惯.c++因为有类的概念,初始化自然看的比较重要. 对于第二个问题,只要你返回类型正确,编译器是不会报错的.不过main函数的返回值是有它的特殊意义的,它的意义在于供其它程序查看你的退出码,以判断你是否成功执行.所以,不是你一个人在使用这个返回值,如果你随心所欲,结果肯定是被人家误会,吃亏的是你.

天全县15241321436: 我是初学者,这段C++程序为什么会执行错误,请高手帮我分析下?
邸芸苯磺: int i;这里的i是局部变量,需要初始化,你初始化一下,改为int i = 0;试下

天全县15241321436: ++i %= n 是什么意思,在vs里会是错误的,解释下 -
邸芸苯磺: 是的,这句代码是错误的, 因为%= 是一元运算符,左边必须是变量 而你左边设置的是 ++i,这是一个表达式,不是变量,导致编译出错了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网