保持空杯心态和静心去学习,如果读者对C语言有见解,欢迎在评论区提问交流,一同分享自己的学习收获;
目录
目的:主要以搭框架为主, 简单的认识和掌握C语言
1.什么是C语言?
2.第一个C语言
3.数据类型
4.变量
5.常量
6.字符串
7.注释
8.转义字符
9.选择语句
10.循环语句
11.函数
12.数组
13.操作符
14.关键字
15.#define定义的常量和宏
16.指针
17.结构体
C语言是一门计算机编程语言,简单来讲就是人和计算机能交流的一种高级语言;
这里讲一下如何用visual stdio2019/2022这个编译器来编写第一个C语言,建议实操;
然后就可以编写第一个C语言代码了,一定要用英文输入法,按ctrl+F5就可以运行了;
main叫做主函数,主函数是所有程序的入口,C语言中必须要有主函数,有且只有一个主函数;
主函数表示:
int main()
{
return 0;
}
printf函数是打印函数,将字符串打印在显示板上,%d是一种整型占位符,字符串中会说占位符;
为了描述不同的数据,因而有不同的数据类型,可分为三类
1.整形的数据类型(描述整数)
short 短整型 占2Byte=16bit
int 整型 占4Byte=32bit
long 长整型 占4Byte=32bit
long long 加长整型 占8Byte=64bit
2.浮点型(描述小数)
float 单精度浮点型 占4Byte
double 双精度浮点型 占8Byte
3.字符型(描述字符,如a,A...)
char 字符型 占1Byte
为什么会有这么多类型呢?因为不同的类型所表示的数范围不一样,所占存储空间也不一样,给出那么多类型可供我们选择,选择合适的数据类型能节省很多空间,也可用来创建变量;
如何测量它们所占的存储空间的大小呢?用sizeof这个关键字(单位:字节Byte)
整型数据范围公式:-2^n-1~2^n-1减1,n为整型所占字节(Byte)——了解即可;
什么是变量?值可以变的叫变量;
1.变量(可分为局部变量和全局变量)
变量的命名规则:
1.只能用大写字母,小写字母,数字,下划线(_)命名;
2.不能以数字开头,如1bc就是错的;
3.变量名是区分大小写的;
4.变量名不能使用关键字;
2.如何定义(声明)变量?
数据类型 变量名;如int a; float b; char c;
一个好的编程风格就是在声明变量的同时给一个初始值 如int a=0; float b=1.5; char c=‘A’;
3.局部变量和全局变量
可以简单的认为在大括号{}内部创建的变量叫做局部变量;在大括号{}外部创建的变量叫做全局变量;
全局变量:
如果局部变量和全局变量冲突时,局部优先:
4.变量的作用域和生命周期
作用域:可简单理解为作用范围
生命周期:可简单理解为从变量创建到变量销毁的一个时间段
局部变量的作用域:变量所在的局部范围;
局部变量的生命周期:进作用域生命周期开始出作用域生命周期结束;
全局变量的作用域:整个工程(程序);
全局变量的生命周期:整个程序(工程)的生命周期;
什么是常量?值不能变的叫常量;
常量可分为以下4种:字面常量,const修饰的常变量,define定义的标识符常量,枚举常量;
1.字面常量:
2.const修饰的常变量:
3.define定义的标识符常量:
4.枚举常量:
枚举(能一一列举的) 先要有包容心态,大概了解一下,也可以去实操一下;
什么是字符串?字符串就是由双引号引起的一串字符,如“abcdef”
注意:字符是单引号引起的一个字符
字符串的结束标志是一个\0的转义字符。在计算字符串长度时\0不算做字符串内容,如“abcdef”字符串长度是6,但“abcdef”中是有\0这个转义字符的,由下图可见arr1占7个字节,表面上看只占6个,但其实\0也占一个字节
那如何求字符串长度呢?用strlen这个库函数,但要使用它要先声明,即添加#include
strlen是计算\0之前的字符串长度;
我们在arr中加上\0呢?//%s是打印字符串的,%d是打印整型的,%c是打印单个字符的,%f是打印小数的
说明了\0是字符串终止的标志;
主要有两种/*.......*/和//........,注释的东西是不会被编译器所编译(识别)的;
转义字符也是字符,要用单引号引用,其占位符是%c;
转义字符 | 意义 | ASCII码对应的10进制 |
---|---|---|
\a | 响铃 | 007 |
\b | 退格 | 008 |
\f | 换页 | 012 |
\t | 水平制表符(相当于Tab) | 009 |
\v | 垂直制表符 | 011 |
\' | 单引号 | 039 |
\" | 双引号 | 034 |
\\ | 反斜杠 | 092 |
\n | 换行,将当前位置转移到下一行开头 | 010 |
\r | 回车,将当前位置转移到本行开头 | 013 |
\ddd | ddd表示1~3个8进制数对应的字符 | 八进制转十进制 |
\xdd | dd表示2个十六进制字符 | 十六进制转十进制 |
还有一个\?转义字符,就表示在控制板上打印?
注意区分数值0、‘0’、‘\0’
0就表示0,‘0’对应的ASCII值为48,‘\0’对应的ASCII值为0;
ASCII码表:
举个例子:
首先,写法//C语言中非0即真,0是假
if (条件为真)
{printf(”“);}//大括号用于多条语句
else if()
{printf(”“);}
else
{printf(”“);}
循环分三种:
while循环、for循环、do...while循环
我们只讲while循环
声明变量;
while(循环条件)
{ printf(”“) ; 变量自加;如a++表示a自己增加1 }
只有达到while的循环条件后才能跳出循环。
简单的了解一下函数,首先是写法(只是简单的了解)
函数类型 函数名(可以有参数)
{
让函数做的一些事;
return 函数类型的值;
};
调用函数:函数名();
我们举个例子:计算3+5
我们用函数试试
原理:我们可以将函数看成一个加工厂,把参数看成原料,大括号内看成加工厂内,return函数返回值看成加工后的产品,main函数看作接收者;
什么叫数组?数组就是一系列同类型的数据放在一个组里
如1,2,3,4,5,6,7,8,9是整数我们可以放在{}里
{1,2,3,4,5,6,7,8,9}
如何定义数组呢?数据类型 数组名[元素个数]={各个同类型的元素};
如int a[]={1,2,3,4,5,6,7,8,9};//数组的元素个数可以不写,但一定要初始化(大括号内的各个同类型的元素一定要写)
如何打印数组呢?
我们可得出:
下标 | 0 | 1 | 2 | 3 | 4 |
数组对应元素 | 1 | 2 | 3 | 4 | 5 |
下标是从0开是的对应数组元素1,下标1对应数组元素2..........
如何打印整个数组元素呢?需要我们用到循环结构了
操作符分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员;
我们点到为止,讲一下绿色的操作符;
1.算数操作符
操作符 | + | - | * | / | % |
意思 | 加法 | 减法 | 乘法 | 除法 | 取余 |
取余%操作符:就是取两个数相除的余数;如5%2=1,(5除2等于2......1);
注意:/操作符,5/2=2.5?
2.移位操作符(涉及到了2进制)
操作符 | << | >> |
意思 | 左移(扩大) | 右移(缩小) |
3.位操作符
操作符 | & | | | ^ |
意思 | 与 | 或 | 异或 |
4.赋值操作符
操作符 | = | += | -= | /= | *= | &= | |= | ^= | <<= | >>= |
意思 | 赋值 | 加赋值 | 减赋值 | 除赋值 | 乘赋值 | 与赋值 | 或赋值 | 异或赋值 | 左移赋值 | 右移赋值 |
赋值:如a=5;将等号右边的值给等号左边;
其他的赋值操作符与+=一个意思
我们讲一下+=是什么意思:如a+=3的意思是a=a+3,就是a=a+3的简化形式;
5.单目操作符(只有一个运算对象)
操作符 | 意思 |
! | 逻辑反操作 |
- | 负值(取反) |
+ | 正值 |
& | 取地址 |
sizeof | 测量所占字节的大小 |
~ | 对一个数的2进制按位取反 |
-- | 前置、后置-- |
++ | 前置、后置++ |
* | 解引用操作符 |
(类型) | 强制类型转换 |
首先,先讲一下取反操作符!,在C语言中非0真,0是假;!的 意思就相当于颠倒是非,把真变为假,把假变为真;
然后讲一下+,-,这个很容易理解;
最后我们来讲一下自加(自减和自加一个道理);
自加包括前置自加和后置自加(自减也一样)
注意sizeof和strlen的区别:
sizeof是操作符,是计算所占内存空间的大小;
strlen是库函数,只针对字符串。求字符串的长度。计算字符串\0之前的字符个数;
其他的后面会讲,这里主要让大家初识一下C语言;
6.关系操作符
操作符 | 意思 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不等于 |
== | 等于 |
前面四个就是字面意思,我们讲讲后两个;
如何比较字符串的大小呢?用strcmp库函数,使用它是要和使用strlen一样,要在main函数上面标明#include
7.逻辑操作符
操作符 | 意思 |
&& | 逻辑与 |
|| | 逻辑或 |
输一个在2~10的数,并打印hehe,输入一个大于10,小于0的数,并打印haha;
逻辑与&&是两个都为真时才为真;逻辑或||有一个为真则为真,全假才为假;
8.条件操作符(三目操作符,即有三个运算对象)
操作符 | 意思 |
? : | 表达式1?表达式2(真):表达式3(假) |
如比较3和2的大小 ,如果3>2输出6,否则输出0;
9.逗号操作符
10.下标引用、函数调用和结构体成员
操作符 | 意思 |
[ ] | 下标引用符 |
( ) | 函数调用符 |
. | 获取结构变量的成员 |
-> |
指向结构体 |
关键字在C语言中是有着特殊意义和用法的;
下面我们看看C语言中的关键字有哪些?
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typeof union unsigned void volatile while |
首先,我们先分个类
循环 | 分支 | 数据类型 | 修饰 | 自定义类型 | 其他 | 特殊 |
break continue do while while for |
if else goto switch case break default |
signed unsigned char short int long long long float double |
const-修饰变量 static-静态 auto-修饰局部变量 |
enum-枚举 struct-结构体 union-联合体/共用体 |
typedef extern register return sizeof |
volatile |
1.typedef关键字
意思是重命名;
2.register关键字
意思是建议编译器将变量放在寄存器中,那么什么是寄存器呢?
寄存器其实本质上是存储数据的一种,其他的还有高速缓存、内存、硬盘;
那么他们有什么区别吗?
按照读取速度来看:寄存器的读取速度最快>高速缓存>是内存>硬盘;
按照存储空间来看:寄存器的存储空间最小(Byte)<高速缓存(M)<内存(8G/16G)<硬盘(500G/1T);
3.static静态关键字
static关键字可以修饰局部变量;
如果有static关键字修饰局部变量呢?
static修饰全局变量时;
extern是从外部引用的意思,全局变量和函数也可以从外部文件中引入;
如果用static修饰全局变量?
static修饰全局变量时?
用static呢?static使得函数的外部链接属性变为内部链接属性,即只能在其所在的源文件(1文件)中使用;
其实本质上被static修饰的局部变量改变了存储区域;
内存区域 | 存放内存 | 释放时间 |
栈区 | 局部变量和函数参数等临时变量 | 由编译器自动分配释放 |
堆区 | 动态内存分配 | 由程序员分配释放 |
静态区 | 全局变量和静态变量 | 程序结束时释放 |
常量区 | 常量 | 程序结束时释放 |
程序代码区 | 2进制表示的程序代码 | \ |
局部变量:被static修饰前:栈区;被static修饰后:静态区;
1.#define定义常量
2.宏 //原理:宏会被他的宏体所替换
首先,学习指针前要先了解一下内存;
内存是电脑上的储存器,计算机所有程序都是在内存中运行的;
我们可以把内存划分成好多个内存单元,每个内存单元占一个字节,如果把每个内存单元进行编号,这些编号被称为内存单元地址,也成为指针;
指针的应用
指针大小;
用struct关键字(自动创建类型)
我们今天就讲到这里了,如果喜欢本文,不妨点个赞,我会继续分享接下来我的学习内容的,让我们一同成长;