目标:10k
签名:道阻且长,行则将至。
一些计划:
1. 2天更新一期 IUTV
2. 每天一节课 一周5节 + 完成作业 + 整理笔记
3. 2天一节英语课 + 一天一个单词
一 | 二 | 三 | 四 | 五 | 六 | 七 |
---|---|---|---|---|---|---|
==C++==/IUTV /单词 | ==Linux==/英语/单词 | 作业/IUTV /单词 | ==C++==/英语/单词 | ==Linux==/IUTV /单词 | 作业/英语/单词 | ==C==/刷题/IUTV |
六月
一 | 二 | 三 | 四 | 五 | 六 | 七 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | ==17== | ==18==/C++/英语/ | ==19==/C++/ |
==20==C++/ | ==21==/C++/ | ==22==C++/IUTV/ | ==23== | ==24==Linux/ | ==25==C++/作业/ | ==26==/刷题/ |
==27==/ | ==28==/ | ==29==/刷题/ | ==30==/C++/ |
七月
一 | 二 | 三 | 四 | 五 | 六 | 七 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
八月
一 | 二 | 三 | 四 | 五 | 六 | 七 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
看课 -> 笔记 -> 习题 -> 博客
初识C语言
数据类型 | 解释 |
---|---|
char | 字符数据类型 (1) |
short | 短整型 (2) |
int | 整形 (4) |
long | 长整型 (4) |
long long | 更长的整形 (8) |
float | 单精度浮点数 (4) |
double | 双精度浮点数 (8) |
long double | 长 双精度浮点数 (8) |
C语言有没有字符串类型? |
int 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));
sizeof();求字符的大小
strlen(); 求字符串的长度
%d - 整数
%c - 字符
printf("%d\n", 100); 100
printf("%c\n", 100); d - ASCII码
return 0;
}
char ch = 'e';
printf("%c\n", ch); e
printf("%d\n", ch); 101 - ASCII码值
初识C语言2
作用域
1. 局部变量的作用域是变量所在的局部范围。
2. 全局变量的作用域是整个工程。
局部变量的作用域
第一种情况:可以打印
int main()
{
int b = 10
{
printf("%d\n",b);
}
return 0;
}
第二种情况:不可以打印 说明此时的int的作用域只在{}里
int main()
{
{
int b = 10
}
printf("%d\n",b);
return 0;
}
全局变量的作用域
在整个工程文件中都能用
工程文件:头文件
源文件
test.c
test2.c
**在test.c中的全局变量在test2.c中也能使用**
需要声明:
extern int a;
extern - 用关键字声明
生命周期
局部变量的生命周期:
进作用域生命开始
int main()
{
int a = 0
return 0;
}
出作用域生命结束
全局变量的生命周期
程序(main函数)的生命周期
生命周期 结束后 销毁 但是内存空间还在 只是访问权限没有了
常量
不能改变的量 就是常量
- 字面常量
3.14; - 浮点型常量
10; - 整形常量
- const修饰的常变量:不能修改具有常属性
const int a = 100; - 不能修改具有常属性(不能被改变的属性)
int a = 100; 可以修改
证明const修饰的 n 为变量
const int n = 100; //常变量:具有常属性的变量
int arr[n] = {0}; //报错了 因为n为变量
arr[/*应该放常量*/] = { 0 };
- define定义的标识符常量
#define MAX 100
MAX = 200; 报错 因为这是常量 变量才能改变
int arr[MAX] = {0}; 正确
- 枚举常量:一一列举
//性别
enum Sex
{
//枚举的可能取值 - 枚举常量
MALE=3, //常量 在初始值可以设置成3 、 7
FEMALE=7,
SECRET
};
int main()
{
//enum Sex s = SECRET; //只能选择Sex中的常量
printf("%d\n", MALE);//0
printf("%d\n", FEMALE);//1
printf("%d\n", SECRET);//2
MALE = 4;//ERR - 不能改
return 0;
字符串
表示一个字符
'a'
' ' 空字符
'ab' 错误
字符串:双引号引起来的
"abcdef"; 字符串字面值
char ch[10] = "abcdef"; 初始化 abcdef \0 \0 \0 \0
%s - 打印字符串
\0 - 字符串的结束标志
如果字符串初识化写满了 没有\0的位置 那么会一直打印随机值 直到遇到\0
strlen - 求长度时
\0不算长度
头文件为 string.h
转义字符 - 转变意思
\t
\n
\0 0 6 5
\ddd - 8进制:的065转换成10进制:是53 (8^2 + 8^1 + 8^0)
乘法 0 + 48 + 5 = 53
在ASCLL里 53 代表 5
printf("%c\n",'\065'); // 5
printf("%c\n",'\x65'); // 5
\xdd - 16进制
printf("%d\n", strlen("c:\test\328\test.c")); //14个字符 \328 8进制不能有8 \32为一个
c : \t est \32 8 \t e s t . c
转义字符 | 释义 |
---|---|
? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' | 用于表示字符常量' |
\“ | 用于表示一个字符串内部的双引号 |
\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示2个十六进制数字。 如: \x30 0 |
注释
/**/ - C语言注释风格 - 不能嵌套
// - C++注释风格
选择语句
if(判断语句) 这里注意 赋值 和 判断符号
{
}
else
{
}
循环语句
while(判断条件)
{
条件++
}
函数
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int sum1 = 0;
int sum2 = 0;
int sum = 0;
//输入
scanf("%d %d", &sum1, &sum2);
//计算
//sum = sum1 + sum2;
sum = Add(sum1, sum2);
//输出
printf("%d\n", sum);
return 0;
}
数组:一组相同类型元素的集合
数组{1,2,3,4,5,6,7,8,9,10}
元素的下标 0,1,2,3,4,5,6,7,8,9
int main()
{
//char ch[5] = { 'a','b','c' };
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
while (i<10)
{
printf("%d ", arr[i]);
i++;
}
return 0;
}
操作符
//+ - * / %
int main()
{
//float - %f
int a = 5 / 2; // 商2余1 //2
float b = 5 / 2; //2.0000
float c = 5 / 2.0; //2.5000
int d = 7 % 2; //1
printf("%f\n", c);
printf("%d\n", d);
int e = 6;
int f = e << 1;
printf("%d\n", f);//12 1100
printf("%d\n", e);//6 0110
return 0;
}
初识C语言3
操作符
算数操作符
+ - * / %
移位操作符
>> - 右移操作符
<< - 左移操作符
位操作符
& - 按2进制位与 - 有0为0
^ - 按2进制位异或 - 相同为0,相异为1
| - 按2进制位或 - 有1位1
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
int main()
{
int a = 0; //初始化
a = 20; //赋值
return 0;
}
单目操作符
操作符 | 解释 |
---|---|
! | 逻辑反操作 |
- | 负值 |
- |正值
& |取地址
sizeof |计算字符的字节
~ |对一个数的二进制按位取反
-- |前置、后置--
++ |前置、后置++ - |间接访问操作符(解引用操作符)
(类型) |强制类型转换
~ 操作符解释
负整数在计算机中存储的是 - 源码 (根据真实的值和符号位写出的2进制位)
源码 -
反码 - 符号位不变,其他位按位取反
补码 - 反码+1
计算 - 补码
内存 - 补码
打印 - 源码
++
前置++:++a - 先++再使用
后置++:a++ - 先使用再++
-- 同理
强制类型转换 - 尽量避免
int a = (int)3.14; //3
关系操作符
> >= < <= != ==
逻辑操作符
&& - 逻辑与 - 并且
| - 逻辑或 - 或者
三目操作符
(表达式)(?是否为真)(结果1)( <<为真:为假>>)(结果2)
b = ((a == 5) ? (-6) : (6));
1 ? 2 : 3
结果:1成立则 为2
结果:1不成立则 为3
,
, - 逗号表达式 从左向右依次计算
int main()
{
int a = 0;
int b = 3;
int c = -1;
int d = (a = b - 5, b = a + c, c = a + b, c -= 5);
b的结果是表达式为C的结果
因为C是最后一个表达式
return 0;
}
下标引用操作符
[]
int arr[] = {0};
函数调用操作符
()的操作数 1.函数名 2.参数1 3.参数2
tesrt(x,y);
常见关键字
关键字 | 解释 |
---|---|
auto | 自动变量(一般在int前面 因为常用所以省略不写了) |
for | 用于循环(for(i = 0;i <10 i++);) |
while | 循环体(while(i<10){i++;}) |
do | 配合while 组成do while |
if | 意为如果(还有esif(或者如果)) |
else | 意为否则(配合if使用) |
switch | 分支选择语句(配合case使用)(switch(整形和枚举类型,不能为浮点类型)) |
case | 作为switch的分支(类似if、esif)(case 常量整形:) |
default | 作为switch的分支(类似else) |
break | 停止,中断(终止循环、switch语句) |
return | 返回值 (return 0;、return 1;) |
goto | 跳转语句(可以跳转到任意语句处) |
sizeof | 计算字符所占空间的大小 - 字节 |
scanf | 读取键盘输入(scanf("%d",&a);) 只读取到空格就结束读取 |
getchar | 在键盘上每次读取一个字符 |
putchar | 打印字符到屏幕 |
gets | 读取字符串 空格也能读 |
strlen | 计算字符串Add 的长度,直到空结束字符(\0),但不包括\0 |
const | 常属性(可以锁定变量,但变量还是变量) |
continue | 用于循环(跳过一次循环后面的代码) |
enum | 枚举(在初识C语言2>常量>枚举有详细介绍) |
extern | 声明外部符号(extern int a;) |
register | 寄存器 - 存储空间 - CPU(register int main = 100; 不能取地址 取地址是取内存的地址) |
static | 1.修饰局部变量 2.修饰全局变量 3.修饰函数 (下面会讲) |
struct | 结构体(存储多种类型,例如学生信息 姓名 性别 成绩) |
typedef | 类型定义 - 起别名(typedef unsigned int uint;) |
unsigned | 无符号位 |
union | 联合体(共用体) |
ovlatile | linux (后面会讲) |
define | 宏定义 类似三目操作符(#define MAX(X,Y) (X>Y?X:Y)) |
static
1.修饰局部变量:
改变了变量的生命周期 = 程序的生命周期 , 但作用域没变 还是函数内部
调用函数中的局部变量 变量出作用域就会销毁
在函数中的局部变量前+static 变量出作用域不会销毁
static int a = 100;
---------------------------------------------
2.修饰全局变量:
extern - 声明外部符号
在全局变量前面 + static
static int a = 100;
全局变量:具有【外部】连接属性
static+全局变量:使【外部】=》【内部】 只能在所在的源文件使用
--------------------------------------------
3.修饰函数:
函数可以跨文件使用
声明函数 - extern int Add(int x,int y);
同上
static+函数:使【外部】=》【内部】 只能在所在的源文件使用
define
define 定义符号
#define MAX 100
define 定义宏
#define MAX(X,Y) (X>Y?X:Y)
宏名 参数 宏体
初识C语言4
指针
int main()
{
//
int a = 10;//像内存申请4个字节 放10 取名为a
//sizeof (int) - 4
//printf("%p\n",&a);//打印的十六进制
int* pa = &a;//pa 是存放地址的变量 称为指针变量
*pa = 20;//解引用操作符
printf("%d\n", a);
printf("%d\n", *pa);
return 0;
}
pa 是指针变量 存的是地址(指针)
指针变量的大小
系统 | 大小 |
---|---|
32位 | 4字节(32个0bit/8=4byte) |
64位 | 8字节 |
类型 | 32/64 |
---|---|
char | 1byte |
int | 4byte |
*p | 4byte/8byte |
结构体
struct - 结构体关键字
操作符 | 用法 |
---|---|
. | 结构体变量.成员名(*pa.name) |
-> | 结构指针->成员名(pa->name) |
声明一个学生
struct Stu
{
char name[20];
int age;
char sex[5];
char id[12];
};
struct Book
{
char name[20];
int pricr;
char author[20];
};
int main()
{
struct Stu a1 = {"张三",20,"男","20201123"};
struct Stu a2 = {"小三",20,"女","20201124"};
struct Book b1 = {"C语言",9800,"鹏哥"};
printf("名字:%s 年龄:%d 性别:%s 学号:%s\n", a1.name, a1.age, a1.sex, a1.id);//名字:张三 年龄:20 性别:男 学号:20201123
struct Stu* pa = &a1;
printf("名字:%s 年龄:%d 性别:%s 学号:%s\n", (*pa).name, (*pa).age, (*pa).sex, (*pa).id);//名字:张三 年龄:20 性别:男 学号:20201123
printf("名字:%s 年龄:%d 性别:%s 学号:%s\n", pa->name, pa->age, pa->sex, pa->id);//名字:张三 年龄:20 性别:男 学号:20201123
return 0;
}
一个内存单元 是一个字节(byte)
char - 1byte
int - 4byte
操作符
符号 | 用法解释 |
---|---|
%s | 打印字符串("a") — char arr[20] = {0}; |
%c | 打印字符('a') char |
%d | 打印整形(5) int |
%p | 打印地址(*pa) |
%u | 打印无符号() |
%f | float |
%lf | double |