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语言的基本要素的主要内容,如果未能解决你的问题,请参考以下文章

03新手之章(番外篇)—— 计算机的单位和二进制

02新手之章 —— 敲出闻名世界的“Hello World”

python基本语法要素

Linux C基本要素

C 语言变量本质 ( 变量概念 | 变量本质 - 内存空间别名 | 变量存储位置 - 代码区 | 变量三要素 )

如何高效学习C++?