
本文共 6078 字,大约阅读时间需要 20 分钟。
初识C语言
本章节的笔记只是对C语言的基础知识的一个小概括
详细的讲解笔记后续会细讲
一、C语言的概念
C语言就是一门通用的计算机语言,广泛应用于底层开发。
二、第一个C语言程序
#includeint main(){ printf("hello world\n"); return 0;}
说明:
- #include <stdio.h>是该程序的头文件,因为该函数运用到了printf()函数,所以需要引头文件。
- 接下来是一个main()函数,C语言有规定,一个完整的C语言程序由一个或多个函数组成,必须有且只有一个main()函数,其可以出现在程序任何位置,程序由此开始执行,也结束于此。
- printf()是一个标准输出函数。
- return 0的作用是向操作系统返回一个零值,表示程序正常执行完毕。
三、数据类型
类型名称
- char 字符数据类型
- short 短整型
- int 整型
- long 长整型
- long long 更长的整形
- float 单精度浮点数
- double 双精度浮点数
- unsigned int 无符号整型
- unsigned short 无符号短整型
- unsigned long 无符号长整型
- 以及更多
格式控制
- %c 字符
- %hd 短整型
- %d 整型
- %s 字符串
- %f 单精度浮点数
- %lf 双精度浮点数
- %p 地址格式
- %x 十六进制
- %o 八进制
类型的大小
#includeint main(){ printf("%d\n",sizeof(char)); printf("%d\n",sizeof(short)); printf("%d\n",sizeof(int)); printf("%d\n",sizeof(long)); printf("%d\n",sizeof(long long)); printf("%d\n",sizeof(float)); printf("%d\n",sizeof(double)); printf("%d\n",sizeof(long double)); return 0;}
结果:
说明:
关于sizeof()的说明(1)sizeof()的括号内的内容是不进行计算的(2)sizeof()是运算符不是函数(3)sizeof()运算符有以下两种格式 1.用于求得表达式的值所占内存的字节数,其格式如下: sizeof 表达式 2.用于求得某种数据类型的量所占内存的字节数,其格式如下: sizeof (表达式)
类型的使用
char ch = 'w';float weight = 101.5;int salary = 20000;
四、常量、变量
常量、变量的概念
数学中常数的概念:常数是指固定不变的数值,比如圆周率、真空光速等。
数学中变量的概念:变量是指没有固定的值,可以改变其值,有字母符号来表示,比如y=f(x),x是自变量,y是因变量。
计算机中常量的概念:常量是指在程序运行过程中其值不能改变的量,比如数值和字符值本身就是常量。
计算机中变量的概念:变量是指在程序运行期间其值可以改变的量,比如前面的int a,a就是变量。
定义变量的方法
int age = 150;float weight = 45.5f;char ch = 'w';
变量的分类
- 局部变量
- 全局变量
#includeint global = 2019;//全局变量int main(){ int local = 2018;//局部变量 int global = 2020;//局部变量 printf("global = %d\n",global); return 0;}
总结:
当局部变量和全局变量同名的时候,局部变量优先使用
变量的使用
#includeint main(){ int a=0,b=0,sum=0; printf("请输入两个操作数:>"); scanf("%d%d",&a,&b);//输入函数 sum = a + b; printf("sum = %d\n",sum);//输出函数 return 0;}
说明:scanf()等函数使用时存在不安全,若使用VS提供的函数则会存在跨平台障碍,固应在源文件第一行写
#define _CRT_SECURE_NO_WARNINGS 1
由此来忽略函数存在不安全的警告或错误。
使默认有这句话的话应该打开VS2019的文件位置▶️Program Files (x86)▶️Microsoft Visual Studio▶️2019▶️Professional▶️在搜索框内搜vcprojectitems并点▶️右击newc++file,用Notepad++写上那句话并保存就可以每次默认忽略不安全问题。
变量的作用域和生命周期
作用域
作用域概念:一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。在工程的另一个文件里用到该全局变量时需要进行申明,就需要用到extern关键字,比如extern int global;
生命周期
生命周期概念:变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
常量
常量的分类
- 字面常量
- const修饰的常变量
- #define定义的标识符常量
- 枚举常量
#include#define MAX 5+5//#define定义的 标识符常量,但凡MAX出现,那就相当于5+5(不是10)enum Sex//枚举常量的应用,enum Sex就是一个类型{ MALE, FEMALE, SECRET};int main(){ 52.4;//字面常量 const float a = 5; //const 修饰的常量,经此常变量a将不可改变(a本质上仍然是变量,不可以放在数组的[]中),不然会报错 return 0;}
五、字符串、转义字符、注释
字符串
字符串是由一对" "括起来的字符序列(包括转义字符),其结束标志是\0,计算字符串长度的时候 \0 是结束标志,不算作字符串,但是会占内存一个字节。
#include//打印字符int main(){ char arr1[] = "Hello"; char arr2[] = { 'H','e','l','l','o'}; printf("%s\n",arr1);//正常打印 printf("%s\n",arr2);//会有乱码,因为字符打印唯有遇到\0才会停止 return 0;}
转义字符
转义字符的概念:以’'开头的特殊字符序列,也是字符常量的一种,内存中占一个字节
转义字符 | 释义 |
---|---|
\‘ | 用于表示字符常量’ |
\“ | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。\130 就是X |
\xdd | dd表示2个十六进制数字。\x30 就是0 |
注释
注释用于不需要的代码,可以注释掉或者代码比较难懂,可以加注释
分格:
1./*xxxxxx*/ 缺陷:不能嵌套注释2.//xxxxxxxx 可以注释一行也可以注释多行,推荐
六、选择语句
#includeint main(){ int a = 3,b = 5; if(a > b) printf("%d",a);//运用if-else语句,输出较大值 else printf("%d",b); return 0;}
七、循环语句
- while 语句
- for 语句
- do…while语句
//while循环的实现#includeint main(){ int i = 0; while(i < 10) { printf("%d",i); i++; } return 0;}
八、函数
#includeint Add(int a,int b){ return a + b;}int main(){ int a = 0,b = 0,sum = 0; scanf("%d %d",&a,&b); sum = Add(a,b); printf("%d",sum); return 0;}
函数的特点就是简化代码,方便代码的重复使用
九、数组
数组的概念:一组相同类型元素的集合
数组的定义
int arr[10] = { 1,2,3,4,5,6,7,8,9,10}
- 数组可以不完全定义,未定义的就算0
- 数组的[ ]中不可以是变量
- 数组的下标从0开始
数组的使用
#includeint main(){ int i = 0; int arr[10] = { 1,2,3,4,5,6,7,8,9,10}; while(i<10) { printf("%d ",arr[i]); } return 0;}
十、操作符
算术操作符 例如:+ - * / %
移位操作符 例如:>> <<
位操作符 例如:& ^ |
赋值操作符 例如:= += -= *= /= &= ^= != >>= <<=
单目操作符 例如:! - + & sizeof – ++ ~ (类型)
关系操作符 例如:> >= < <= != ==
逻辑操作符 例如:&& ||
条件操作符 例如:exp1 ? exp2 : exp3(exp1条件为真则执行exp2,为假则执行exp3)
逗号表达式 例如 :exp1, exp2, exp3, …expN(从左向右计算,整个表达式结果是最后一个表达式的结果)
下标引用、函数调用和结构成员 例如:[] () . ->
十一、常见关键字
C语言提供的关键字,不能自己创建关键字
关键字不能做变量名
关键字 | 作用 | 关键字 | 作用 |
---|---|---|---|
auto | 声明自动变量 | extern | 声明变量是在其他文件正声明 |
short | 声明短整型变量或函数 | register | 声明寄存器变量 |
int | 声明整型变量或函数 | static | 声明静态变量 |
long | 声明长整型变量或函数 | volatile | 说明变量在程序执行中可被隐含地改变 |
float | 声明浮点型变量或函数 | void | 声明函数无返回值或无参数,声明无类型指针 |
double | 声明双精度变量或函数 | if | 条件语句 |
char | 声明字符型变量或函数 | else | 条件语句否定分支(与 if 连用) |
struct | 声明结构体变量或函数 | switch | 用于开关语句 |
union | 声明共用数据类型 | case | 开关语句分支 |
enum | 声明枚举类型 | for | 一种循环语句 |
typedef | 用以给数据类型取别名 | do | 循环语句的循环体 |
const | 声明只读变量 | while | 循环语句的循环条件 |
unsigned | 声明无符号类型变量或函数 | goto | 无条件跳转语句 |
signed | 声明有符号类型变量或函数 | continue | 结束当前循环,开始下一轮循环 |
break | 跳出当前循环 | default | 开关语句中的“其他”分支 |
sizeof | 计算数据类型长度 | return | 子程序返回语句(可以带参数,也可不带参数)循环条件 |
简单介绍几个:
-
typedef
typedef 类型定义,就是对类型的重命名
typedef unsigned int u_int;//将unsigned int重命名为u_int,u_int变成了一个类型名int main(){ unsigned int num1 = 0; u_int num2 = 0;//这一句起的作用和上一句是一样的 return 0;}
-
static
-
static修饰局部变量
改变了局部变量的生命周期,本质上是改变了变量的存储类型,从存储在栈区到存储到静态区。
-
static 修饰全局变量
使得这个全局变量只能在自己所在的源文件内部可以使用,其他源文件不能使用。
-
static修饰函数
使这个函数只能在本源文件内使用,不能在其他源文件内使
十二、#define 定义常量和宏
#define MAX 100//define 定义标识符常量#define ADD(x,y) ((x)+(y))//define 定义宏#include
int main(){ int sum = ADD(2,3);//5 sum = 10*ADD(2,3);//50 return 0;} 十三、指针
#include
int main(){ int num = 10; int*ps = num;//num的地址存在了指针变量ps里 *ps = 20;//解引用ps,ps指向变量num,因此可以来改变num中的值 return 0;} 指针大小在32位平台是4个字节,64位平台是8个字节
十四、结构体
#include
struct Stu{ char name[20]; int age; char sex[5];};int main(){ struct Stu s = { "张三",20,"男"};//结构体的创建和初始化 struct Stu*ps = &s; printf("%s %d %s",s.name,s.age,s.sex);//结构体变量.成员变量 printf("%s %d %s",ps->name,ps->age,ps->sex);//结构体指针->成员变量名 return 0;}
发表评论
最新留言
关于作者
