05新手之章 —— C语言的基本要素
Posted 胖仙人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05新手之章 —— C语言的基本要素相关的知识,希望对你有一定的参考价值。
序言
本篇继续更新C语言中的基本要素,文章已经根据新手学习的需要尽量做到简化通俗,更新不易,还请多多点赞支持。
文章中如有不正确的地方,还请读者在评论区中及时指出!
求和代码
目录
四、操作符
什么是操作符
C语言中提供了一些符号,方便我们在敲代码的过程中能按照我们的需求,对代码中的变量或者数字进行运算。对于这样的符号,我们称之为操作符。
说的更简单一些,我们可以把操作符直接理解为运算符。
①算数操作符
加:+
减:-
乘:*
除:/
取模:%
int main() { int a = 5+2; //加法得到a的值为7 int b = 5-2; //减法得到b的值为3 int c = 5/2; //正常计算得到的结果应为2.5;但在编程时,我们要考虑到变量的数据类型 //此处变量c的类型为整型,所以得到的结果只会取到2.5的整数部分2,并且在计算机中,没有四舍五入 float c1 = 5/2; //此时虽然c1的类型为浮点型,但c1的结果仍然为2 float c2 = 5/2.0; //此时结果为2.5,也就是说,除号的两边有至少一个为浮点数时,结果才会为浮点数 int d = 5*2; //乘法得到结果为10 int e = 5%2; //5除以2的结果为2余1,所以e的结果为1(取余数) }
这里要注意除法运算时结果是否为小数的问题,仔细阅读代码的注释部分
②位移操作符
左移操作符:<<左移操作符
右移操作符:>>右移操作符(比较复杂,后续文章中再做介绍)
简单的介绍一下位移操作符:位移操作符,从字面意思看就是把数字向左或者向右移动,但要注意的是,这里的位代表的是二进制中的位;位移,就是把二进制的位进行移动。
所以,在对一个变量进行位移运算的时候,要把变量的值先转换为二进制再进行运算。
在这里,以左移操作符举例:
int main() { int a = 6; int b = a << 1; }
左移操作符‘<<’ 左侧的数或变量代表要位移的对象,右侧的数字代表将这个对象向左位移几位。
上述代码中,将变量a向左位移一位后的值赋给变量b。
运算过程(以32位机器为例):
(1)将a的值先转换成二进制
a的十进制为:6
二进制为:110
因为整型的长度为4字节32位,我们用0补满32位:
0000 0000 0000 0000 0000 0000 0000 0110
(2)将二进制数向左移动1位:
将原二进制数向左移动后,最左端的数字就会溢出,我们将其舍弃;此时最右端会空出一位,补上0,此时就得到一个新的二进制数字了。
(3)将新的二进制数转换成十进制数
新的二进制数转换成十进制数结果为12,所以变量b中的值为12。
③位操作符
按位与:&
按位或:|
按位异或:^
④赋值操作符
赋值:=
复合赋值:
+= , -= , *= , /=
&= , ^= , |=,
>>= , <<=
注意:在C语言中的‘=’和我们平时数学中学的‘=’是不一样,数学中的‘=’代表等式,而C语言中,‘=’的含义是赋值。
如:int a =10; 其含义是将10这个值赋值给变量a,而不是a等于10;
a == 10; 才是等式的含义
int main() { a = a + 10; a += 10; //上面两个式子是等价的 //其他的复合赋值也是相同的 //如 a = a<<1; a <<= 1; //这两个式子也是等价的 }
⑤单目操作符
前面所介绍的操作符,如+,使用时将两个数字或变量相加,比如:a+b,我们称a和b就是+的两个操作数,而+我们称之为一个双目操作符
对比理解一下,单目操作符只有一个操作数。
逻辑反:!
C语言中,非0则代表真,0代表假。这里所说的真假是用在条件判断中的。
比如int a = 10;这里a的值非0,其具有一个真的属性。
int main() { int a = 10; // a代表真 int b = 0; //b代表假 printf("%d\\n", !a); // --> 则此时!a为假,打印结果为0 if(a){}; // a为真时,进入分支语句 if (!a) {}; // a_2为假时,进入分支语句 }
负值和正值:- +
这里介绍的负值,我们就可以理解为我们数学中学的正负号
int main() { int a = 10; //a为正值,省略了+ int b = -a; //b为a的负值,为-10 }
取地址:& (指针篇讲解)
操作数的类型长度:sizeof (以字节为单位)
在前面一章我们介绍了数据类型,每一种数据类型都有其对应的长度,那我们怎么通过C语言编程看到每种数据类型的长度呢,这里就要介绍sizeof操作符
int main() { float a = 3.14; printf("%d",sizeof(int)); //打印int类型的长度 printf("%d",sizeof(b)); //打印浮点数a的长度 }
对一个数的二进制按位取反:~
前置减减、后置减减:--a 、a-- 以及 前置加加、后置加加:++a 、a++
a++和++a的意思都是使a本身自增1,即a = a +1;
但前置++和后置++又有所区别:
int main() { int a = 2; int c = ++a;//前置++会让变量a先自增,再进行对c的赋值 --> c结果位3 int C = a++;//后置++会先进行对c的赋值操作,再进行自增操作 --> c结果位2 }
帮助记忆:判断先赋值还是先自增,遵循就近原则,变量离’=‘近,就是先赋值,反之责是先自增再赋值。
间接访问操作符(解引用操作符):*
强制类型转换:(类型)
⑥关系操作符
关系操作符和我们数学中学习的含义相同,在编程中一般用于条件判断。
大于:>
大于等于:>=
小于:<
小于等于:<=
不等于:!=
等于:==
⑦逻辑操作符
逻辑与:&& (可以理解为或者)
逻辑或:| | (可以理解为并且)
⑧条件操作符
语法:
exp1 ? exp2 : exp3
条件操作符的含义:判断表达式exp1的真假情况,如果exp1为真(可以理解为一个表达式是对还是错,如3>5这个表达式就是错的,则称之为假),则整个表达式的值为exp2,否则为exp3;
int main() { int a = 5; //先判断问号前面的表达式是否为真,若为真,则将-6赋值给c,否则将6赋值给c c = (a == 5) ? -6 : 6; //条件为真,将-6赋值给c }
⑨逗号表达式
语法:
exp1,exp2,exp3....expN
逗号表达式由多个表达式组成,表达式之间用逗号相连。
计算时从左向右依次计算,逗号表达式的结果为最后一个表达式的结果
int main() { int a = 0; int b = 3; int c = -1; int d = (a = b - 5, b = a + c, c = a + b , c -= 5); //逗号表达式会从左向右依次计算,整个逗号表达式的结果会是最后一个表达式的结果 //a = -2;b = -3; c= -5;c = -10 //则最终d的值为-10 }
⑩下标引用、函数调用和结构成员
下标引用操作符:[ ]
函数调用操作符:( )
结构体成员访问操作符:.
取指针所指的对象成员:->
五、转义字符
什么是转义字符
在编程过程中,我们敲在编译器中的每个字母,符号等都叫字符,比如字母n,符号+等等;但还有一些我们看不见的字符,最常见的就是换行,C语言中在字母n前面加了一个斜杠,得到\\n,这个\\n整体就代表我们看不见的换行符,而字母n此时已经不再是我们平时所理解的字母n了,这就是转义字符。
常用转义字符表
转义字符
含义
\\'
让字符可以当作字符本身被输出,而不是当作编译器能够识别的功能性字符
\\"
\\\\
\\n
换行
\\t
制表符
\\ddd
表示1~3个8进制数字,如/065-->转换成10进制-->对应ASALL表中字符5
\\xdd
x后面为两个十六进制数,转换规则与上面相同
转义字符的使用
知识点一:
当我们想让一个程序输出打印我们需要的内容时,可能会用到printf()这个函数,使用这个函数时,先在括号内打上一对双引号:printf(""); 然后在双引号中输入我们想要打印在屏幕上的内容:printf("Hello World"); 此时,运行程序时,电脑上则会打印Hello World。
如果此时我想要打印的结果是被双引号括起来的Hello World,即:"Hello World";你可能会这么做:
#include<stdio.h> int main() { printf(" "Hello World" "); return 0; }
而这种写法是行不通的,运行程序后并不会输出我们想要的结果(建议读者们在VS2019中自行输入这段代码,观察运行结果)
其原因是:像双引号"、单引号' 这样的字符称为功能性字符,在printf()函数中,双引号的功能就是引出需要输出打印的内容;编译器在读到一个双引号时,会自动使其与最近的另一个双引号进行配对,比如上述代码中,第一个双引号就会和第二个双引号配对,而并不会智能的区分开哪些是功能性字符,哪些是程序员想输出的内容
此时,就要用到转义字符。转义字符,就是改变字符原有的意思,即在一个字符前面加上反斜杠 \\;我们在双引号前面加上反斜杠:\\",此时双引号就不在具有功能性,而是可以被当作文本输出
#include<stdio.h> int main() { printf(" \\"Hello World\\" "); return 0; }
知识点二
\\ddd的用法:
该转义字符中,d代表8进制的数字,三个d表示可反斜杠后可以跟上1-3个八进制数字(最大为7),此时反斜杠和这1-3个8进制数构成的整体就被当成一个转义字符,用来表示ASCALL码表中的某个字符
如:/065,三个数字都小于8,则这个整体代表一个转义字符,转换成十进制后,对用ASCALL码表中的字符 5 。
\\xdd的用法:
该转义字符中,d也代表数字,当我们看到\\x时,则代表后面可以跟1-2位16进制数,构成的整体表示一个转义字符,用来表示ASCALL码表中的某个字符,与\\ddd的用法相似。
知识点三
一个转义字符的长度就相当于一个字符的长度,之前我们学过char类型的长度为1,所以一个转义字符的长度也为1。
判断下列代码的输出结果(即判断字符串的长度):
int main() { printf("%d\\n",strlen("C:\\test\\328\\test.c"); //输出结果为14 //\\ddd后面一定要为8进制数字,如果>=8,则说明不是\\ddd的一部分 //所以\\328是由两部分构成的: 转义字符\\32 和字符 8 return 0; }
六、关键字
什么是关键字
关键字可以理解为C语言中已经定义好的一些单词,如int代表整型,return代表返回值等等,这些被定义好的关键字不能被拿来做为变量的名称,比如我想定义一个变量名为int的整型变量int int = 10;这样的写法编译器是不会通过的。
关键字表
类型
名称
备注
选择语句相关的关键字
switch , case , bresk
搭配使用
if , else
if , else if ,else搭配使用
循环语句相关的关键字
while
do
和while组成do while循环结构
for
continue
数据类型相关的关键字
基本数据类型
查看数据类型表
auto
int a = 0,a即为自动变量,省略了修饰关键字auto,在内存中自动创建自动销毁
const
常属性修饰关键字
enum
枚举类型关键字
register
寄存器变量
singned,unsigned
有符号和无符号
struct
结构体类型
union
联合体,共用体
函数相关的关键字
static
静态的
void
空的
return
返回值
default
默认的,也在switch……case……中搭配使用
头部声明相关
extern
声明外部符号
typedef
重定义,用于简化类型
如unsigned int a = 1;可以给unsigned int起个别名,在之后想声明相同类型的变量时,可以直接用别名
typedef unsigned int unit --->这里别名为unit
则下次声明相同类型时:unit b =1;
define
用于定义常量和宏
其他关键字
goto
跳转
sizeof
计算所占空间大小
volatile
异变的(在Linux中讲解)
对于这些关键字,目前只要混个眼熟,看到时能知道这是C语言中的关键字,以避免不合法的使用。至于每个关键字的具体含义和用法会在后面的学习中逐渐完善。
小结
本篇将C语言中剩下的基本元素介绍完了
读者们需要注意,新手之章只是带读者们初步了解C语言,并简单的对某些知识点做一些介绍,文章中没有展开介绍的内容,现阶段还不要求掌握和了解,读完前面的文章,读者们应该可以做到会自己在VS2019的环境下创建一个C语言的项目,并能将文章中的代码敲出来并运行,观察运行结果,结合文章思考学习。
文章已尽量做到言语通俗易懂,如有错误,还请在评论区中指出!
更新不易,还请多多支持!
以上是关于05新手之章 —— C语言的基本要素的主要内容,如果未能解决你的问题,请参考以下文章
02新手之章 —— 敲出闻名世界的“Hello World”