请问c语言在线编译器题目关于编译的题目。能帮我解释图中符号 ①②的作用吗?看着看着我就昏了。求解,谢谢各位

被思科面试官问了一个问题,卡住了:C语言中,两整数相除,若分母为零,则会出现怎样的结果???
[问题点数:0分,结帖人kernelkernel]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:336
本版专家分:32
本版专家分:14929
本版专家分:674
本版专家分:2211
本版专家分:29
本版专家分:240
结帖率 98.85%
本版专家分:56
本版专家分:64335
2009年 总版技术专家分年内排行榜第六
2009年4月 总版技术专家分月排行榜第一
2009年11月 Linux/Unix社区大版内专家分月排行榜第一2009年6月 Linux/Unix社区大版内专家分月排行榜第一2009年4月 C/C++大版内专家分月排行榜第一2009年3月 C/C++大版内专家分月排行榜第一2009年3月 Linux/Unix社区大版内专家分月排行榜第一2009年2月 Linux/Unix社区大版内专家分月排行榜第一
2010年1月 C/C++大版内专家分月排行榜第二2009年10月 Linux/Unix社区大版内专家分月排行榜第二2009年9月 Linux/Unix社区大版内专家分月排行榜第二2009年8月 C/C++大版内专家分月排行榜第二2009年8月 Linux/Unix社区大版内专家分月排行榜第二2009年7月 C/C++大版内专家分月排行榜第二2009年6月 C/C++大版内专家分月排行榜第二2009年5月 C/C++大版内专家分月排行榜第二2009年5月 Linux/Unix社区大版内专家分月排行榜第二2009年4月 Linux/Unix社区大版内专家分月排行榜第二2009年2月 C/C++大版内专家分月排行榜第二2009年1月 Linux/Unix社区大版内专家分月排行榜第二
本版专家分:68
本版专家分:41194
2013年2月 C/C++大版内专家分月排行榜第二
2013年3月 C/C++大版内专家分月排行榜第三
本版专家分:11
本版专家分:1615
本版专家分:831
本版专家分:25856
2003年10月 C/C++大版内专家分月排行榜第二
2004年3月 C/C++大版内专家分月排行榜第三
本版专家分:2
本版专家分:2145
本版专家分:41194
2013年2月 C/C++大版内专家分月排行榜第二
2013年3月 C/C++大版内专家分月排行榜第三
本版专家分:455
本版专家分:10
本版专家分:788
本版专家分:0
本版专家分:1884
2009年7月 C++ Builder大版内专家分月排行榜第二2009年6月 C++ Builder大版内专家分月排行榜第二2009年5月 C++ Builder大版内专家分月排行榜第二
2009年7月 Windows专区大版内专家分月排行榜第三2009年6月 Windows专区大版内专家分月排行榜第三2009年4月 Windows专区大版内专家分月排行榜第三2009年4月 C++ Builder大版内专家分月排行榜第三
本版专家分:6073
2010年4月 其他开发语言大版内专家分月排行榜第二2005年5月 其他开发语言大版内专家分月排行榜第二
2010年5月 其他开发语言大版内专家分月排行榜第三2009年7月 其他开发语言大版内专家分月排行榜第三2005年3月 其他开发语言大版内专家分月排行榜第三
本版专家分:90
本版专家分:11
本版专家分:784
本版专家分:598
本版专家分:548
本版专家分:15
本版专家分:3
本版专家分:165
本版专家分:92
本版专家分:0
本版专家分:20
本版专家分:0
本版专家分:739
本版专家分:108
本版专家分:18
本版专家分:442
本版专家分:92972
2008年 总版技术专家分年内排行榜第五
2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
2008年5月 C/C++大版内专家分月排行榜第二2008年3月 C/C++大版内专家分月排行榜第二2007年10月 C/C++大版内专家分月排行榜第二2007年9月 C/C++大版内专家分月排行榜第二2007年6月 C/C++大版内专家分月排行榜第二2007年5月 C/C++大版内专家分月排行榜第二
本版专家分:203
本版专家分:562
本版专家分:0
本版专家分:154
本版专家分:32
本版专家分:41
匿名用户不能发表回复!|转义字符_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
所有的都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加&\&来表示常见的那些不能显示的ASCII,如\0,\t,\n等,就称为转义字符,因为后面的,都不是它本来的ASCII字符意思了。
转义字符字符表
所有的转义字符和所对应的意义:
ASCII码值(十进制)
退格(BS) ,将当前位置移到前一列
换页(FF),将当前位置移到下页开头
换行(LF) ,将当前位置移到下一行开头
回车(CR) ,将当前位置移到本行开头
水平制表(HT) (跳到下一个TAB位置)
垂直制表(VT)
代表一个反斜线字符''\'
代表一个单引号(撇号)字符
代表一个双引号字符
\?代表一个问号063\0
空字符(NULL)
1到3位八进制数所代表的任意字符
三位八进制
1到2位十六进制所代表的任意字符
二位十六进制
注意:区分,斜杠:&/& 与 反斜杠:&\& ,此处不可互换
转义字符字符型常量
字符型常量所表示的值是字符型变量所能包含的值。我们可以用ASCII来表示一个字符型常量,或者用单引号内加表示转义字符。
'A', '\x2f', '\013';
其中:\x表示后面的字符是,\0表示后面的字符是八进制数。例如十进制的17用十六进制表示就是
‘\x11’,用八进制表示就是‘\021’;
注意:在Turbo C 2.0中,字符型表示数的范围是-128到127,除非你把它声明为unsigned,这样就是0到255。
上面我们见到的\x,\n,\a等等都是叫转义字符,它告诉需要用特殊的方式进行处理。
转义字符组成
转义字符串(Escape String),即字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。
比如,要显示小于号(&),就可以写 & 或者 & 。
用实体(Entity)名字的好处是比较好理解,一看lt,大概就猜出是less than的意思,但是其劣势在于并不是所有的浏览器都支持最新的Entity名字。而实体(Entity)编号,各种浏览器都能处理。
提示:实体名称(Entity)是区分大小写的。
备注:同一个符号,可以用“实体名称”和“实体编号”两种方式引用,“实体名称”的优势在于便于记忆,但不能保证所有的浏览器都能顺利识别它,而“实体编号”则没有这种担忧,但它实在不方便记忆。
转义字符编程语言
如HTML转义符、java 转义符、xml 转义符、 oracle 转义符、sql 转义符 、sqlserver 转义符、php 转义符、asp 转义符、vb转义符、 javascript 转义符等等,还有网址中的。
例如,HTML的& &&&&分别是&,&,&,",(C);的转义字符
XML只有5个转义符: & && & &
转义字符作用
转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“&”和“&”这类符号已经用来表示HTML标签,因此就不能直接当做文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。
其实所有编程语言,拥有转义字符的原因基本上是两点:一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。二、某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。比如说Html中,&被HTML定义为标签的开始,所以当我们转入&时,HTML就会把它当作为开始,而不是当作一个&来看待。再如PHP 的双引号("),被PHP定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符了。不然PHP就会报错了。
从上面也可以看出转义无非是两种情况:1:将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。2:用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。还有有些脚本语言是弱类型,有些语言比如html 并不是编程语言,而是标记语言,有些语言只有一种类型 比如shell 脚本语言,这些语言中字符串都不加引号” ” ,或者可以不加引号“ ”,所以有时候需要转义字符说明某字符此时的身份是普通字符,而不是有特殊意义的元字符。
另外出于网站的安全。在数据写入数据库前,都会使用转义字符(函数)对一些敏感字符进行转义。这样做可以避免一些别有用心的人利用特殊符号的注入攻击。
转义字符显示空格
通常情况下,HTML会自动截去多余的空格。不管你加多少空格,都被看做一个空格。比如你在两个字之间加了10个空格,HTML会截去9个空格,只保留一个。为了在网页中增加空格,你可以使用 & 表示空格。
转义字符url
web 开发中通过问号(?)方式在浏览器地址栏中传值时。浏览器是通过“&”来区分问号后的参数个数的。 如果出现传值参数中带有“&”时,在接受页面就会出现错误,类似如下请求路径:/next.jsp?param1=hendhs89&furej & param2=sss
参数param1中含有转义字符“&” ,这样会导致被请求页的参数接收错误。
在传值前 通过 java.net.URLEncoder.encode(param1) 编码处理后,可将转义字符转为16进制;
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL中指定的参数间的%26
8. = URL中指定参数的值 %3D
9. ! URL中指定参数的值 %21
转义字符如何避免
在编写网页时,如果直接在双引号之间输入路径,其中的“\”及其之后的文本易被误认为转义字符。为避免这一点,C#等语言只需在字符串的引号前加“@”符号(不包括外侧引号)。如:@ "c:\ab\cd\ef.jpg" 。
清除历史记录关闭&&&&&转载本文&UBB代码&HTML代码复制到剪贴板...&更多内容··········&&&热帖排行&&&频道精选&微信扫码关注本站公众号wangchaonetcn&  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。&王朝女性&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝分栏&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝编程&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝导购&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝其他&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&&&2005-&&版权所有&C语言中的符号的技巧
一、注释符号
C语言中的符号:
奖项:Best of show
功能:处理三种文件格式(PGM、PPM和ASCII Art)的降采样工具
作者:Google华裔工程师Don Hsi-Yun Yang
注释符号,下面哪些注释是正确的。
#include &stdio.h&int main()
int/*...*/i; // 注释由空格来代替,所以是正确的& &&
char* s = &abcdefgh & & &//hijklmn&; // 在双引号中的注释会当成字符,所以也不会报错,但与程序愿意不符 & & & &
//Is it a \& & valid comment? // ‘\’接续符,整个语句就是一个注释& &&& &
& in/*...*/ //会报错& &&&&
& return 0;
gcc编译后出错结果:
[root@localhost 1]# gcc 1-1.c&
1-1.c: In function ‘main’:1-1.
c:11: error: ‘in’ undeclared (first use in this function)1-1.
c:11: error: (Each undeclared identifier is reported only once1-1.
c:11: error: for each function it appears in.)1-1.
c:11: error: expected ‘;’ before ‘t’
注释规则小结:
1、编译器会在编译过程删除注释,但不是简单的删除而是用空格代替
2、编译器认为双引号括起来内容都是字符串,双斜杠也不例外
3、&/*........*/&型注释不能被嵌套
4、你觉得y = x/*p是什么意思?
作者本意:把x除以*p的结果赋值给y
编译器:将/*作为一段注释的开始,把/*后的内容都当成注释内容,直到*/出现为止
在编译器看来,注释和其它程序元素都是平等的,所以,作为程序员也不能看轻注释。
5、出色注释怎么来写
1、注释应该准确易懂,防止二义性,错误的注释有害而无利
2、注释是对代码的提示,避免臃肿和喧宾夺主
3、一目了然的代码避免加注释
4、不要用缩写来注释代码,这样可能会产生误解
5、注释用于阐述原因而不是用于描述程序的运行过程
下面是一个漂亮程序的截取部分:
========================================================================
GENERAL DESCRIPTION: Concrete implementation of RootForm and base IForm
========================================================================
========================================================================
Copyright ? QUALCOMM Incorporated
All Rights Reserved.
QUALCOMM Proprietary/GTDR
========================================================================
========================================================================
/*==================================================================================
XXXXXXX Confidential Proprietary
(c) Copyright XXXXXXX - All Rights Reserved
Revision History:
Modification
Major Changes
----------------------
------------
------------
----------------------------
Daniel Rossler
01/18/2007
LIBkk94550
Add check for NULL pointers
in order to avoid a panic
==================================================================================*/
// If there are still forms on the stack, then we need to set up several things:
1. The topmost form is the active form
2. All other forms are not active
3. The topmost form is being listened to via mlFormActive
4. The topmost non-popup form is being listened to via mlFormTopmostNonPopup
5. The topmost non-popup form and all popup forms on top of it are shown
6. Forms below the topmost non-popup form are now shown
二、接续符和转义符
下面是C语言中程序:
#include &stdio.h&
int main()
printf(&%0X\n&, p);
接续符的使用:
1、编译器会将反斜杠剔除,跟在反斜杠后面的字符自动解到前一行
2、在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格
3、接续符适合在定义宏代码块时使用
下面是一个宏代码块的使用实例:
#include &stdio.h&
#define SWAP(a,b) \ // 使用define的原因就是
{ & & & & & & & & &&&\ // define定义宏块必须要在一行内完成
& & int temp = & & & &\
& & a = & & & & &&\
& & b = & & \
void swap(in a, int b)
// 如果使用这个函数,不能实现a与b的替换,
// 因为这里进行的是参数的值传递,它实现的是a和b拷贝的实现
int main()
& & int a = 1;
& & int b = 2;
& & SWAP(a,b);
& & printf(&a=%d, b=%d\n&, a, b);
& & return 0;
宏块的使用实际就是代码块的替换。
C语言中的转义符(\)主要用于表示无回显字符(实际代表一个动作),也可用于表示常规字符
\n 回车换行 \t&横向挑到下一制表位置 &\v 竖向挑格\b 退格\r&回车\f&走纸换页\\&反斜杠“\”\'&单引号\a&鸣铃
\ddd 1-3位八进制数所代表的字符
\xhh 1-2位十六进制数所代表的字符
1、C语言中的反斜杠(\)同时具有接续符和转义符的作用
2、当反斜杠作为接续符使用时可直接出现在程序中
3、当反斜杠作为转义符使用时需出现在字符或字符串中
三、单引号和双引号
下面是一个实例:
#include &stdio.h&
int main()
& & //char* p1 = &1 ; &//p指向内存地址为1
& & //char* p2 = '1'; &//字符在内存中实际是一个整数,它指向地址为49的内存
& & char* p3 = &1&;
& & //printf(&%s, %s, %s&, p1, p2, p3);
& & printf('\n'); //printf的原型函数为int printf(char const *format, ... );所以理由同
& & & && &//char *p2 = '1'; \n 就是10;出现段错误
& & printf(&\n&);
& & return 0;
1、C语言中的单引号用来表示字符常量
2、C语言中的双引号用来表示字符串常量
'a'表示字符常量
在内存中占1个字节
‘a’+1表示‘a’的ASCII码加1,结果为‘b’
“a”表示字符串常量
在内存中占2个字节
“a” + 1表示指针运算,结果指向“a”结束符‘\0’
混淆概念的代码:
#include &stdio.h&
int main()
& & //char c = & &;//将字符串赋值给一个字符,字符串实际代表一段包含字符串的
& & & & & && //内存地址,而将它赋值给char,会被截断,发生无法预料的结果
& & char c = '';
& &// while( c==&\t& || c==& & || c==&\n& )
& &while( c=='\t' || c==' ' || c='\n' )
& & & & scanf(&%c&, &c);
& & return 0;
1、本质上单引号括起来的一个字符代表整数
2、双引号括起来的字符代表一个指针
3、C编辑器接受字符和字符串的比较,可意义是错误的
4、C编译器允许字符串对字符变量赋值,其意义是可笑的
清晰基本概念,远离低级错误
四、逻辑运算符
逻辑运算符的短路问题分析代码:
#include &stdio.h&
int main()
& & int i = 0;
& & int j = 0;
& & if( ++i & 0 || ++j & 0 )
& & & & printf(&%d\n&, i);
& & & & printf(&%d\n&, j);
& & return 0;
#include &stdio.h&
int g = 0;
& & return g++;
int main()
& & if( f() && f() ) &//第一个f()为假,后++导致返回为0,而后加加。短路了。
& & & & printf(&%d\n&, g);
& & printf(&%d\n&, g);
& & return 0;
1、程序中的短路
短路规则:
》||从左向右开始计算,当遇到真的条件时停止计算,整个表达式为真;所有条件为假时表达式才为假。
》&&从左向右开始计算,当遇到假的条件时停止计算,整个表达式为假;所有条件为真时表达式才为真。
2、“!”到底是神马?
#include &stdio.h&
int main()
& & printf(&%d\n&, !0);
& & printf(&%d\n&, !1);
& & printf(&%d\n&, !100);
& & printf(&%d\n&, !-1000);
& & return 0;
C语言中的逻辑符“!”只认得0,只知道见了0就返回1.因此当其作用的值不为0时,就返回0,可见其对0的钟爱。
3、三目运算符(a ? b : c)可以作为逻辑运算符的载体
规则:当a的值为真时,返回b的值;否则返回c的值
#include &stdio.h&
int main()
& & int a = 1;
& & int b = 2;
& & int c = 0;
& & c = a & b ? a :
& & //(a & b ? a : b) = 3; //返回为a的右值,不能用3进行赋值
& & *(a & b ? &a : &b) = 3; //返回a的地址,使用指针可以实现赋值操作
& & printf(&%d\n&, a);
& & printf(&%d\n&, b);
& & printf(&%d\n&, c);
& & return 0;
五、位运算符分析
在C语言中的位运算往往用于外设的操作,通过串口和并口去操作外设。
乘除余和加减的优先级都要高于位运算符
& 按位与 | 按位或^ 按位异或~ 取反&&左移&&右移
位运算符符合交换律和结合律
1、C语言中为什么还需要运算符?
位运算往往运行速度快,这对于我们的嵌入式设备来说是非常重要的。
2、左移和右移
# 左移运算符&&将运算数的二进制位左移
规则:高位丢弃,低位补0
# 右移运算符&&把运算数的二进制位右移
规则:高位补符号位,地位丢弃
3、0x1 && 2+3的值会是什么?
先算2+3,结果为32
4、位运算符分析
防错准则:
1、避免位运算符,逻辑运算符和数学运算符同时出现在一个表达式中。
2、当位运算符,逻辑运算符和数学运算符需要同时参与运算时,尽量使用括号()来表达计算次序
# 左移n位相当于乘以2的n次方,但效率比数学运算符高
# 右移n位相当于除以2的n次方,但效率比数学运算符高
下面是一个使用不同方式实现交换操作
#include &stdio.h&
// 要使用一个临时变量,多使用了一个资源
#define SWAP1(a,b) \
{ & & & & & & & & &\
& & int temp = &\
& & a = & & & & \
& & b = & & &\
//进行了改进,但a+b有可能溢出。它适用于所有类型
#define SWAP2(a,b) \
{ & & & & & & & & &\
& & a = a + & & \
& & b = a - & & \
& & a = a - & & \
//这是一个神奇的方法,避免了溢出。但只用于int型,float不可以
#define SWAP3(a,b) \
{ & & & & & & & & &\
& & a = a ^ & & \
& & b = a ^ & & \
& & a = a ^ & & \
int main()
& & int a = 1;
& & int b = 2;
& & SWAP1(a,b);
& & SWAP2(a,b);
& & SWAP3(a,b);
& & return 0;
面试题详解:
有一个数列,其中的自然数都是以偶数次形式出现,只有
一个自然数出现的次数为奇数次。编写程序找出这个自然数
问题的解决方案:
1、将数列排序
2、遍历数列并且计数
缺点:时间复杂度高,也就是说耗时。
1、遍历数列找到最大值max
2、动态申请max+1的int型数组b
3、把b数组的每个元素清零
4、for循环
b[a[i]]++;
5、for遍历b数组,寻找奇数元素,就是奇数次出现的自然数,此自然数就等于其所在的数组下标号。
缺点:空间换时间,秏空间比较大。
C:就是下代码实现。使用位运算来实现查找奇数次自然数
#include &stdio.h&
#define DIM(a)(sizeof(a)/sizeof(*a))
int main()
int a[] = {2, 3, 5, 7, 2, 2, 2, 3, 5, 7, 1, 1, 1};
int find = 0;
int i = 1;
for(i = 0; i & DIM(a); i++)
find = find ^ a[i]; & //通过数列所有数的异或操作,最后只剩余了出现奇数次的元素
printf(&find = %d&, find);
课后思考:
1、&&,||,!与&,|,~ 的意义是否相同?它们可以再条件表达式中交替使用吗?为什么?
答:它们是不同的。&&,||,!是对数据整体来操作,而&,|,~ 是对数据按位来操作的,所以它们意义不同,最终结果也不同。因此不可以在条件表达式
中相互替换。
2、1&&32的结果是什么?1&&-1的结果是什么?为什么?
当使用1&&32的时候,程序会出现警告:
[Warning] left shift count &= width of type [enabled by default]&
当使用1&&-1的时候,程序也会出现警告:
&[Warning] left shift count is negative [enabled by default]&
个人解释:
我们在进行位移操作时一定要注意:
1、移动位数保证非负
2、移动位数不能超过类型宽度
六、++,--操作符使用分析
1、一对令人头疼的兄弟
int i = 3;
(++i) + (++i) + (++i);
上面这个表达式的值是不确定的,因为这是C语言的一段灰色地带,对于不同的编译器会有不同的编译方式,也就对应着不同结果。
一共有三种编译方式:
1、按从左到右的顺序依次来计算,即4+5+6
2、先从左边计算前两个的++,后依次计算。即5+5+6(5+5+6+7...)
3、先计算所有++,而后再相加,即6+6+6
gcc和g++采用的是第二种方式。
2、令人头疼的逗号表达式
逗号表达式不是C语言的灰色地带,它有自己明确的规则:从左到右的顺序求值,最后一个表达式的值就是逗号表达式的值
int i = 3;
x = (++i, i++, i+10);
运行结果为x = 15;
笔试面试中的++i+++i+++i
上式的阅读要使用标准的阅读方法,贪心法
1、编译器处理的每个符号应该尽可能多的包含字符
2、编译器以从左向右的顺序一个一个尽可能多的读入字符
3、当即将读入的字符不可能和已读入的字符组成合法符号为止(而使用空格可以阻止贪心阅读,所以我们在编写代码应该实时的使用空格)
下面是一个实例:
#include &stdio.h&
int main()
& & int i = 0;
& &//int j = ++i+++i+++i;
& &//上式使用贪心法阅读到++i++ 等效于2++ ,显然出现了错误
& & int a = 1;
& & int b = 2;
& & int c = a+++b;
& & printf(&%d\n&, c); // c的值为3
& & printf(&%d\n&, a); //a的值为2
& & int* p = &a;
& & b = b/*p; //报错了,这里成了注释,空格可以终止贪心,b = b / *p;
& & return 0;
六、优先级和类型转换的分析
下面是一个运算符优先级的实例:
#include &stdio.h&
#include &malloc.h&
typedef struct _demo
& & int* pI
int func(int v, int m)
& & return (v & m != 0); //==和!=优先级大于位操作符&
int main()
& & Demo* pD = (Demo*)malloc(sizeof(Demo));
& & int *p[5]; //[]优先级高于* ,指针数组
& & int *f(); //()优先级高于* ,指针函数
& & int i = 0;
& & i = 1, 2; //所有运算符','优先级最低&
& & //*pD.f = 0; //.运算符优先级高于* ,所以会报错&
& & pD-&f = 0;
& & free(pD);
& & return 0;
C语言隐式类型转换:
1、算术运算式中,低类型转换为高类型
2、赋值表达式中,表达式的值转换为左边变量的类型
3、函数调用时,实参转换为形参的类型
4、函数返回值,return表达式转换为返回值类型
代码分析:
#include &stdio.h&
int main()
char c = 'c';
short s = 0;
printf(&%d\n&, sizeof(s+c));
&//结果为4
#include &stdio.h&
int main()
& & int i = -2;
& & unsigned int j = 1;
& & if( (i + j) &= 0 )
& & & & printf(&i+j&=0\n&);
& & & & printf(&i+j&0\n&);
& & printf(&i+j=%0x\n&, i + j);
& & printf(&i+j=%d\n&, i+j);
& & return 0;
运行结果为:
i+j&=0
i+j = ffffffff
i+j = -1
说明 -1 的补码就是 ffffffff ,因为负数在计算机中是以补码的形式存储的。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 c语言编译器哪个好 的文章

 

随机推荐