当前位置: 首页 > news >正文

自然景观网站模板/项链seo关键词

自然景观网站模板,项链seo关键词,中国建设银行官网网站首页,云龙主机 wordpress我想,这里的读者一定会有大学生,你们在学C语言时,一定遇到过许多求“(i)(i)(i)”之类的问题。昨天有人问我,令我一时语塞,研究了半天。今天我要告诉你们,这样的语句是罪恶的。你们也许要说,这明…
我想,这里的读者一定会有大学生,你们在学C语言时,一定遇到过许多求“(i++)+(++i)+(i++)”之类的问题。昨天有人问我,令我一时语塞,研究了半天。今天我要告诉你们,这样的语句是罪恶的。你们也许要说,这明明是考试重点呀。别急,下面我们分成三个部分来组织:在第一部分中,解释为什么它有罪;第二部分,为了解救你们,我们找出解题规律;在第三部分中,给出几个更变态的题目,今后谁出这种题给你,你就用我这里的题目去问他。
一.  这种语句的合法性
C语言的创始人D.M.R在《CPL》中明确指出:
自增与自减运算符只能作用于变量,类似于表达式(i+j)++是非法的。
自增运算实际上包括了一个赋值运算,而表达式不能作赋值运算的左值,因为它没有确定的内存地址。只要你明白 (i+j)=5 是非法的,那就不难理解为什么(i+j)++非法。以此为依据,(i++)+(i++)这个语句中的后一项,是非法的。尽管看起来它只是一个i++,但别忘了,在前一个i++的作用下,后面的“i”本身就已经是表达式了,表达式不能再做++。一般地,在一个语句中,对同一个变量调用多次自增或自减运算,都是非法的。D.M.R还提醒,编译器应在这种情况下给出警告。事实上,gcc确实会对此给出一个:
Warning: operation on ‘i’ may be undefined
这已经够清楚了,无需多言。请编写教学大纲者注意,多年以来,你们一直在用非法语句作考试重点。
二.  如何计算
尽管它非法,但同学们没有执法权,只能任其蹂躏。所以,我们探索一下,编译器在摸不到头脑的情况下,是如何处理这个语句的。我们以 (i++)+(++i)+(++i)+(i++)+(i++) 为例,先将其编译成汇编代码,结果是这样的:
addl    -4(%rbp), %eax
movl    -4(%rbp), %eax
addl    -4(%rbp), %eax
incl    -4(%rbp)
addl    -4(%rbp), %eax
addl    -4(%rbp), %eax
addl    -4(%rbp), %eax
incl    -4(%rbp)
incl    -4(%rbp)
incl    -4(%rbp)
为了照顾看不懂汇编的朋友,我把它直接对应着翻译成C语言。用变量sum表示要求的和,就是下面这个样子:
i=i+1;
sum=i;
sum=sum+i;
i=i+1;
sum=sum+i;
sum=sum+i;
sum=sum+i;
i=i+1;
i=i+1;
i=i+1
这段代码能帮助你理解这个过程,我就不说了,留给你自己探索。下面直接给出我分析的结果:
1. 先将所有的 i++ 改成 i ,然后在整个语句的最后,统一将 i 自增相应的次数(语句中有几个 i++,就在最后自增几次)。我们的例子,这时会变成 i+(++i)+(++i)+i+i; i++; i++; i++;
2. 按照加法的结合性,先将左起前两项相加。如果前两项中含有 ++i,则先算 ++i;
3. 前两项的和作为一项,与第三项相加,以此类推。同样,遇到 ++i,就先算 ++i。
以上就是编译器处理这种语句的规律,当然,这并不是C语言定义的,只是编译器在出错情况下的无奈之举。大家可以用这个方法来解题,下面我就回答昨天一位同学问我的问题:
i=5; 求 (i++)+(++i)+(i++) 的值
按上面的方法做:
1. 先把i++换到最后面,变成 i + (++i) + i ; i++; i++;
2. 从左到右累加,先拿出前两项 i + (++i)。先算 ++i,i 的值变成6,两项相加得12;
3、计算 12 +i,得18。
三.  以牙还牙
我们的教育者既然喜欢出这种题目,以我的分析,恐怕是有一种变态癖。既然这样,我就满足一下他们的胃口。读者朋友,以后谁给你出这种题,你就用下面的题目去问他。
1. 写出下面语句的运行结果:
printf("printf(%d)",printf("%d",printf("%d",printf)));
2:写出下面函数的值
int i=2;
pow(i+(++i)+(i++), (i+(--i)+(i--), i+(++i)+(i--)));
3:写出下面程序的运行结果
main()
{
int x=0,y[14],*z=&y;*(z++)=0x46;*(z++)=y[x++]+0x0F;
*(z++)=y[x++]-0x12;*(z++)=y[x++]+0x08;*(z++)=y[x]-0x4B;
x=*(--z);while(y[x]!=NULL) putchar(y[x++]);
}
http://www.jmfq.cn/news/5185783.html

相关文章:

  • 网站建设合同模式/西安网站建设推广专家
  • 网站要流量有什么用/网店代运营商
  • 白城网站建设/什么是口碑营销
  • 南京做网站建设有哪些/360信息流广告平台
  • 网站电子备案/西安seo优化排名
  • 做网站多少钱大概/跨境电商平台
  • 知识产权网站建设/百度人工客服
  • 服装设计公司排名前十强/广州百度网站排名优化
  • 中央人民政府网官网/网站排名优化价格
  • 免费建站论坛/百度广告推广怎么做
  • 哪个网站可以做c 的项目/最近在线直播免费观看
  • 微信公众号链接网站怎么做/开封网络推广公司
  • 广州 做网站/泰安网络推广培训
  • 网络创业培训平台/sem优化师是什么意思
  • 如何找外贸网站建设公司/找客户的软件有哪些
  • 受欢迎的锦州网站建设/玉溪seo
  • 网站基本模板/yw77731域名查询
  • 深圳网站开发/企业营销管理
  • 优秀企业网站设计/google chrome
  • 柳州做网站优化/营销网站案例
  • 自己做网站需要下载什么软件/软件商店安装
  • 乌兰察布做网站/公司网站建设全包
  • php网站留言/广州网站优化服务商
  • 网站策划建站/百度天眼查
  • 做网站哪家好 青岛/武汉做seo
  • java做视频网站/百度一下首页版
  • 网站建设保教/中国十大互联网公司排名
  • ip地址做网站/网站内容优化怎么去优化呢
  • 自己做资金盘网站/营销型网站建设目标
  • 北京网站建设1000zhu/搜索数据