C语言 麻烦大师解释一下为什么a=1时a+++a=2;而++a+a++=4呢?

作者&投稿:英受 (若有异议请与网页底部的电邮联系)
C语言问题....麻烦高手给解释下,谢谢哈!~

因为p代表的是p变量中保存的值,也就是a变量的地址,而&p才是p的地址。

C语言学习方法谈谈偶的学习方法,抛砖引玉!:)

学习不论讲不讲方法,最终都能学会。但是别人1个月学会了,而你却100年才学会,这不就晚了么?:)所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。

什么才是学习C语言的捷径?我的答案是看书。书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书当然要看好书,只有好书才营养丰富。假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如拙著《C语言之四书五经》中介绍的4本。(虽然这些书很多已经绝版了,但我相信电子版也是很有益处。况且,如果你真的想看,我相信你一定有办法搞的到。)这些书你会在很短的时间内看完(比如一两个月),这取决于你的基础和悟性。之后要看那些书呢?我不妨再列几本。Bjarne Stroustrup的《C++程序设计语言》(The C++ Programming Language)一定要看,这本书里面对于C的一些基础概念的定义,比我见过的其他任何C语言书都要全,都要仔细;Bjarne Stroustrup的《C++语言的设计与演化》(The Design and Evolution of C++)和David R.Hanson 的《C语言接口与实现 创建可重用软件的技术》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。读书破万卷,coding如有神。总而言之,就如《传》中云:“生而知之者,上也;学而知之者,次也;困而学之又其次也。”我们不能总是因困而学之,而要做到兵马未动,粮草先行。

看书是学习的导向,书中能一一介绍清楚概念,但书却不能把应用的细节一一介绍给你,因为应用总是招数繁复,变化多端。因此我们要想熟悉招数,懂得书中所讲怎么使用,还要多读源码。Linus给别人解答问题的时候,常说Read the fucking source code;候捷也在其文中提到“源码之前,了无秘密。”这就是大师的箴言呀。源码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。可以说高手的经验大都是源自代码。源码和书一样,也是要看好的,不要看差的。在此,我推荐看Linux kernel source code 和 Linux tcp/ip source code。这两套代码都是开源的,垂手可得。此外,还可以配合着Andrew S.Tanenbaum的《操作系统的设计与实现》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux内核 源代码情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux设备驱动程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP详解(3部)》 (TCP/IP Illustracted )、W.Richard Stevens《UNIX环境高级编程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的内容)等书来看,方便的很。

当然程序不是看出来的,是写出来的。我高中的时候每天坚持写6个小时程序,《数据结构》和排列组合、图论方面的习题反复做了N遍。到现在虽然已经时隔五六年,很多内容早已淡忘掉,但却培养了我很强的编码能力和调试能力,直到现在还对我的工作有很大的帮助。

学习忌贪多、忌浮躁、忌急功近利、忌目中无人。把学习计划放的长一些,培养一个好的学习方法,一步一步慢慢走,终能成为高手。

自加运算顺序自左到右,a 是先运算再加, a是先加再参与运算,所以a a=(a ) a=1 1=2,运算后a值才为2;而第二个是先运算 a,此时a值为2,所以 a a =2 2=4

首先a++ a的值在此语句中的值不改,到下行执行时改变
++a a的值本行就改变
所以a+++a=1+1=2;然后a的值变为2
++a(立刻改变)+a=2+2=4

这个是考运算符优先顺序,你查找有关资料,比如c语言运算符优先级表就能轻松解决。希望能帮到你。


承德县15044379086: C语言 麻烦大师解释一下为什么a=1时a+++a=2;而++a+a++=4呢? -
富郎丽泽: 首先a++ a的值在此语句中的值不改,到下行执行时改变++a a的值本行就改变 所以a+++a=1+1=2;然后a的值变为2++a(立刻改变)+a=2+2=4

承德县15044379086: C语言麻烦大师解释一下为什么a=1时a+++a=2;而++a+a++=4呢? -
富郎丽泽: a+++a和 (a++)+a一样,a为1,1+1=2,执行完后a+1 ++a+a++就是(++a)+(a++),a先+1,此时a=2,2+2=4,执行后再加1,变为3

承德县15044379086: C语言 为什么k=0时a=2而k=2时a=7, 麻烦详细解释一下,谢谢 -
富郎丽泽: 因为初始k=0,进入循环后就k++; 所以:k=1时,a=a+(s[1]-'0')=0+('2'-'0')=2 k=2时,a=a+(s[2]-'0'+1)=2+('1'-'0'+1)=4 k=3时,a=a+(s[3]-'0')=4+('3'-'0')=7 k=4时,a=a+(s[4]-'0'+1)=7+('4'-'0'+1)=12

承德县15044379086: C语言中a=b,意思是说把b赋值给a,还是说把b里面的值赋值给a? -
富郎丽泽: 当a和b为普通变量时, a=b,是把b的值赋值给a, b不变;当a和b为指针时, a=b, 是把b的指向赋值给a, 让a也可以指向b的指向,b的指向不变;

承德县15044379086: 请问C语言中a=b - --c为什么是解释为a=(b--) - c -
富郎丽泽: C语言中操作数会尽可能多地结合运算符. 所以就这样了 其实这也是C的一个陷阱缺陷吧推荐你去看看那本 C陷阱与缺陷 挺有趣的

承德县15044379086: C语言里a是一个无符号整形变量,语句a=a>15是什么意思?有什么作用? -
富郎丽泽: 1、a=a>15 ,这条语句首先执行的是,如果成立,则比较的结果就是非零值1,然后将1赋值给a(即a=1),如果a > 15不成立,则比较的结果就是0,,然后将0的值赋给a(即a=0); 2、所以a的值不是1,就是0.因为你只给了一条语句,题目描述也不清楚,基本上是不能知道这条语句在整个程序中的作用.

承德县15044379086: c语言中 a=x!=y 是什么意思? 求大师指点. -
富郎丽泽: 很久没看C了,这个应该是是考察运算符先后的表达式,整理下应该是: a = (x!=y) 就是给a赋值一个逻辑值,a为bool类型的话就是true或者false,a为int类型的话应该就是0或者1

承德县15044379086: C语言中a=4; a|2的意思,如果a=3; a|2为什么是3,麻烦大家帮忙,考试用啊,拜托啦 -
富郎丽泽: 你好, a=4; 是将a的值赋为4, a/2; 中的/是除法运算符,即求商,但你求完的商并没有存被你存起来, 一般来说,正确的写法是再定义一个变量b, 然后执行 b=a/2; 此时a值未变为4,b为2; 如若是 a=3; b=a/2; 则a为3,b为1. 你说的a=3;a/2;为3因该是你最后输出的是a,而a的值在你赋值后并未发生改变,所以是3. 望采纳.

承德县15044379086: C语言...哪位大侠会啊... int a,b,c a=10;b=50;c=30; if(a>b)a=b;b=c,c=a; printf(a,b,c); -
富郎丽泽: 10,30,10

承德县15044379086: 在C语言赋值运算符中,当a=3时,a*=4+(a%=2)的结果为什么会是等于5的?我是个初学者,麻烦讲明白点.谢谢 -
富郎丽泽: 要知道"%" 这个百分好是取余的意思就明白了 a%=2 是a除以2,也就是3/2,取余数1,然后把1赋给a,之后a+4=5.

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