C语言各种符号的使用介绍上篇_第1页
C语言各种符号的使用介绍上篇_第2页
C语言各种符号的使用介绍上篇_第3页
C语言各种符号的使用介绍上篇_第4页
C语言各种符号的使用介绍上篇_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C语言各种符号的使用介绍上篇目录1、注释符号1.1注释的基本注意事项1.2如何写出好的注释2、接续符和转移符2.1续行功能2.2转义字符3、单引号和双引号3.1基本概念3.2特殊情况4、逻辑操作符4.1(逻辑与)4.2||(逻辑或)4.3逻辑与和逻辑或的笔试题

1、注释符号

1.1注释的基本注意事项

为了更好的演示我们下面的代码会在Linux平台下演示(\为续行符):

这段代码,哪一行是有问题的呢?

这里可能有小伙伴就有疑问了,为什么只有这一行出了问题呢?我们知道注释在预处理阶段就被编译器识别出来了,这里我们可以用Linux的一个指令:gcc-Etest.c-otest.i这样就是对test.c程序进行翻译,最终把预处理的结果保留下来,接着就可以用vim打开我们的预处理结果文件了。

最终我们可以得出这样一个结论:注释被替换本质上是被替换成空格!

这里我们要再提一个简单的点,C语言注释无法被嵌套,/*总是与最近的*/匹配,感兴趣的小伙伴可以去测试下:

intmain()

/*printf("helloworld");

printf("helloworld");*/

return0;

}

这里还有一个有趣的代码,如果用C语言的注释的话,如果只出现了一个/*找不到下面的*/的话,那么他就会默认下面所有代码都被注释!

intmain()

intx=10;

inty=5;

intret=0;

int*p=

ret=y/*p;

return0;

}

那么如何解决上面这种情况呢?

在/与*中加上空格:ret=y/*p;

把*p用括号括起来:ret=y/(*p);

推荐第二种,因为看起来会更直观

1.2如何写出好的注释

[建议1]注释应该准确易懂,不能有争议性,错误的注释反而有害。

[建议2]要保证注释与代码的一致性,没用的注释及时删除。

[建议3]对于全局数据(全局变量、常量定义)必须要加注释。

[建议4]一目了然的语句可以不加注释,比如:i++;//i自增1。

[建议5]注释的位置应与被描述的代码相邻,可以与语句同一行,不放在下方。

[建议6]当代码比较长,特别是有多重其那套时,应当在一些段落的结束处加注释。

[建议7]注释的缩进要与代码的缩进一致。

[建议8]注释代码应当注重,为何做,而不是怎么做。

[建议9]数值的单位一定要给上注释。

[建议10]复杂的函数中,在分支语句、循环语句结束之后需要适当的注释,方便区分各个分支或循环体。

2、接续符和转移符

2.1续行功能

C语言里用反斜杠(\)表示断航。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动续接到前一行。但是注意:反斜杠之后不能有空格,感兴趣的小伙伴可以下来测试下:

intmain()

inta=1;

intb=2;

intc=3;

if(1==a\

2==b\

3==c)

printf("Youcanseeme!\n");

else

printf("Youcannotseeme!\n");

return0;

}

可能有的小伙伴会好奇,明明我不用\也可以换行不会报错啊,那为什么还要用\表示换行呢?我们作为一个程序员,别人可能也会去阅读我们的代码,如果不带\直接换行可能会出现奇异,在一个也可以告诉编译器这个地方是续行,语义更强!

2.2转义字符

C语言中,有一些字符,就是他的字面意思,比如n,b,t。也有一些字符,本身就是特殊含义的,比如:,,\转义的本质含义是:字面转特殊,或者特殊转字面。

\有两种用途:

当续行符使用转义字符使用(a.字面转特殊b.特殊转字面)

这里我们重点讲一下\n和\r可能小伙伴们都听过换行和回车吧!那么他们本质上的意思是不一样的!但是现在很多编译器让换行(\n)里面也包含了回车(\r)的功能!那他们俩究竟有什么样的区别呢?

换行:让光标移动到下一行

回车:光标回到当前行的最开始

这里小伙伴可以试一下用C语言写一个简单的倒计时功能,就能很明显的区分换行和回车的区别了!

这里我们也可以来看一道笔试题:

//以下程序输出什么?

#includestring.h

#includestdio.h

intmain()

printf("%d\n",strlen("abcdef"));

//\62被解析成一个转义字符

printf("%d\n",strlen("c:\test\628\test.c"));

return0;

}

这里第一个打印函数,我们如果有了解,strlen()函数是求字符串中\0之前的字符个数,所以第一个打印的是6,第二个打印函数,首先是\t被解析成一个转义字符,\62也被解析成一个转义字符(8进制)所以第二个打印的应该是14!

3、单引号和双引号

3.1基本概念

对于C语言有了解的小伙伴都知道,单引号引起来的都是字符常量,双引号引起来的都是字符串常量,但其实对于初学者来说还是容易出错,比如a,和a是完全不一样的概念,在字符串中,以\0为结尾,他本质上不属于字符串的元素内容,只能说他是字符串结束标识符,但是它会占用空间!也就是a会占一个字节而a,则会占两个字节。

有了上面简单的概念我们来看一个例子:

这里可能就有小伙伴有疑问了,前两个和最后一个printf打印结果我还能理解,可是第三个为啥是占四个字节呢?这明明不是一个字符常量吗?(C++中第三个大小为1个字节,因为这里是讲C语言所以我们不讨论其他语言)

其实在C99标准的规定,1叫做整型字符常量(integercharacterconstant),被看成是int类型。

光是用标准规定用来证明是不可行的,我们再用一个实例来证明:

看到这个结果不要惊讶,我刚刚说过,标准规定,整型字符常量被看成是int类型,所以他会有四个字节的空间,而且我当前电脑是小端存储,所以低字节序放在低地址处,在者,将一个4字节的数据放入char类型的变量中是会发生数据截断的,会将低地址的一个字节内容放入char类型的变量中,所以其实最终c变量里放的只是一个d字符!

但是我不推荐上面这种写法!!!我们明白其中道理就好。

那这里有的小伙伴又开始下去实验了,于是写出了这样的代码:

因为一个整型字符常量只有4个字节空间,他如何能放得下5个字节甚至更多呢?

3.2特殊情况

显而易见,是不能出现空整型字符常量的,但是可以出现空字符串,因为字符串结束标识符\0虽然不能算字符串元素内容,但是它也是占大小的。

4、逻辑操作符

4.1(逻辑与)

概念:级联两个(多个)逻辑表达式,必须同时为真,结果才为真。

例子:

对于逻辑与的短路现象,因为我们编译器是从左往右扫描的,所以如果当表达式左边为假的话,它就不会去执行逻辑与右边的表达式,这也就是我们所称的短路现象:

4.2||(逻辑或)

概念:级联两个(多个)逻辑表达式,必须至少一个为真,结果才为真。

例子:

上面这个例子同时也包含了逻辑或的短路现象,在逻辑或中,因为编译器是从左往右扫描代码的,所以只要表达式左边为真,则不需要进行右边的判断。

4.3逻辑与和逻辑或的笔试题

因为对于前置++和后置++我还没有讲,所以有基础的同学可以先看看,没基础的可以等我下期出了符号第二期在回来看这道题。

第一个逻辑与表达式,a变量的初始值是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论