课堂笔记
c/c++入坑第一课
1.什么是编程语言???(了解为主不需要死记硬背)
语言:汉语 英语 日语/韩语/泰语
自然语言本质就是帮助人和人之间沟通交流
编程语言的本质就是帮助人和计算机沟通交流
思考:和计算机沟通交流的方式是啥啊???
通过数据和计算机沟通交流
思考:在计算机如此众多的零部件中和数据打交道的硬件有什么???
cpu(中央处理器) 磁盘 内存
历史故事:编程语言的由来!!!
编程语言的由来是源自于内存的构成材料:晶体管===>日光灯
1.开灯(1)/通电 2.关灯(0)/不通电
最早期诞生的计算机语言:0和1 二进制 机器码
并且直到现在为止我们的计算机还是只能识别0和1
汇编语言:主要就是基于机器码 只不过是新增了一些指令与命令
高级语言: c语言 c++ java python ruby go php c# JavaScript .... (更加接近人类语言)
工欲善其事必先利其器---作案工具
IDE(装逼词汇---专业术语):(集成开发环境)---(编程软件)
1.编译器:翻译 (把代码翻译给计算机听)
2.调试器: 帮助我们找bug的神器!!!
3.代码编辑器:比记事本牛逼的记事本(提供 联想 代码快速生成 行号等功能)
行号怎么调:工具 --->选项--->文本编辑器--->c/c++语言(勾选里面的行号)
4.图形界面工具:留着...
c/c++入坑第一个程序
1.文件后缀名
.exe 可执行文件(二进制文件)
.c/.cpp c语言/c++语言源文件
.h head(头部) 头文件
#### 2.程序的结构:就是告诉让你理解(写一个程序等于你吃一顿饭)
看菜单 点菜 做菜食材 吃
头文件 函数 函数参数 结果
3.入坑第一个代码
#include <stdio.h> //头文件 老师我在使用头文件的时候 我怎么知道里面有什么函数呢
int main(){
//我要使用某一个函数是 我需要用到什么头文件呢???
printf("老龙很帅!!!\n"); //函数 xxx() ('内容'):函数参数
//结果
return 0;//程序的结束
}
/*
#include 引用
引用头文件有两种不一样的姿势:
<xxx.h> 告诉编译器从系统目录查找引用当前头文件 (老龙)
"xxx.h" 告诉编译器从用户目标查找引用当前头文件 (如花)
main() 主函数 程序的入口点 程序的开始 程序===生命 起源===母亲
main函数是程序的入口点,一个程序有且只有一个main函数.
printf向标准的输出设备输出一个字符/字符串.
return 0 返回 程序的结束
\n 换行
注释: // 单行注释 /*块注释:多行注释*/
误差比较大 英文 误差就不大
我喜欢你 英文 I 老虎 you 日语 あなたが好きです
代码 汇编语言 二进制 0和1
//编译的过程:a.c代码如何变成a.exe经历什么??? 编译器 编译
1.预编译 展开头文件(正式看头文件里面的内容)与宏替换
gcc -E a.c -o a.i
2.汇编 gcc -S a.i -o a.S
3.编译(多文件联合编程) gcc -c a.S -o a.o
4.链接 (多个obj/.o文件链接到一起编程.exe文件)
gcc a.o -o a.exe(b.exe xxx.exe)
*/
c语言中数据类型
2.1.1关键字
C的关键字共有32个
- 数据类型关键字(12个)
char,short,int,long,float,double
unsigned,signed,struct,union,enum,void - 控制语句关键字(12个)
if,else,switch,case,default
for,do,while,break,continue,goto,return - 存储类型关键字(5个)
auto,extren,register,static,const - 其他关键字(3个)
sizeof,typedef,volatile
2.1.2数据类型
数据类型的作用:编译器预算对象(变量)分配的内存空间大小
基本类型: 整形(int,short,long),字符型(char),实形/浮点型(float,double)
数据类型: 构造类型: 数组类型,结构类型(struct),联合类型(union),枚举类型(enum)
指针类型:(char *,int *, int **等)
2.1.3 常量
- 常量
- 在程序运行过程中,其值不能被改变的量
- 常量一般出现在表达式或赋值语句中
- 整形常量:100,200,-100,0
- 实形常量:3.14,0.125,-3.66456
- 字符型常量:'a','b','c','d','e'
- 字符串常量:"Hello World","老龙很帅"
2.1.4变量
- 变量
- 在程序运行过程中,其值可以被改变
- 变量在使用前必须先定义,定义变量必须有相应的数据类型
- 标识符命名规则:
- 标识符不能是关键字
- 标识符只能由字母,数字,下划线组成
- 第一个字符必须为字母或者下划线
- 标识符中字母区分大小写
- 变量的特点
- 变量在编译时为其分配相应的内存空间
- 可以通过其名字和地址访问相应内存
- 声明和定义的区别
- 声明变量不需要建立存储空间.如:extern int a;
- 定义变量需要建立存储空间,如:int b;
#include <stdio.h>
int main(){
//extern关键字只做声明,不能做人和定义,后面还会学习,这里先了解
//声明一个变量a,a在这里没有建立存储空间
extern int a;
a=10;//没有空间,就不可以赋值
int b=10; //定义一个变量b,b的类型为int,b赋值为10
return 0;
}
从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所以的声明都是定义
- int b 它既是声明,同时又是定义
- 对于extern int b来讲它只是声明不是定义
一般情况下,把建立存储空间的声明称之为'定义',而把不需要建立存储空间的声明称之为'声明'.
2.1.5 使用示例
#include <stdio.h>
#define MAX 100
/*
1.#开头的语句是预处理语句,无需分号结束
2.定义一个宏定义标识符MAX,它代表100,MAX它是常量
3.宏定义以后的代码都可以使用MAX
4.在后面出现的MAX,预处理都会替换为100
*/
int main(){
MAX;
MAX;
//const 是一个关键字,作用是修饰一个变量只读
const int b=10086;
return 0;
}
2.2进制
二进制,八进制,十进制,十六进制
进制也就是进位制,是人们规定的一种进位方法,对于任何一种进制---X进制,就表示某一位置上的数运算时逢X进一位,十进制逢十进一,十六进制是逢十六进一,二进制是逢二进一,以此类推,X进制就是逢X进一.
十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 a
11 1011 13 b
-
二进制,位,字节与字
我们习惯于十进制的数:10,12等
一个位只能表示0,或者1两种状态,简称bit,一个位是一个bit
一个字节位8个二进制,称为8位,简称BYTE,8个bit是一个字节
一个字为2个字节,简称WORD
两个字为双字,简称DWORD
-
八进制
八进制以8为基数的进制系统,c语言当中用0表示八进制,比如:0666 -
十六进制
十六进16为基数的进制系统,c语言当中用0x表示十六进制
//进制的输出方式
#include <stdio.h>
int main(){
int a=10;//什么都不写默认是十进制数据
int b=010;//数字前面加个0表示八进数据
int c=0x10;//数字前面加个0x表示十六进制数据
printf("%d\n",a);//%d表示按照十进制数据输出显示
printf("%o\n",b);//%o表示按照八进制数据输出显示
printf("%x\n",c);//%x表示按照十六进制数据输出显示
return 0;
}
2.3 计算机内存数值存储方式
原码
将最高位作为符号位(0代表正,1代表负),其余各位代表数值本身绝对值
+7的原码是00000111
-7的原码是10000111
+0的原码是00000000
-0的原码是10000000
反码
- 一个数如果为正,那么反码和原码相同
- 一个数如果为负,那么符号位为1,其他各位与原码相反
+7的反码00000111
-7的反码11111000
+0的反码00000000
-0的反码11111111
补码
原码和反码都不利于计算机运算,如:原码表示的7和-7相加,还需要判断符号位
整数:原码,反码,补码都相同
负数:最高位为1,其余各位原码取反,最后对整个数+1
-7的补码:=
10000111(原码)
11111000(反码)
11111001(补码)
+0的补码为:00000000
-0的补码为:
10000000(原码)
11111111(反码)
100000000(补码)
补码符号位不动,其他位求反,最后整个数+1,得到原码
用补码进行运算,减法可以通过加法实现
7-6=1
7的补码和-6的补码相加:00000111+11111010=100000001
进位舍弃后,剩下的00000001就是1的补码.
7: -6:
00000111(原码) 10000110(原码)
00000111(反码) 11111001(反码)
00000111(补码) 11111010(补码)
00000111(7的补码)
11111010(-6的补码)
100000001(1)
-7+6=-1
-7的补码和6的补码相加:11111001+00000110=11111111
-7: 6:
1000 0111(原码) 0000 0110(原码)
1111 1000(反码) 0000 0110(反码)
1111 1001(补码) 0000 0110(补码)
2.4 sizeof关键字
sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节
int类型
- int常量,变量
int就是32位的一个二进制整数,在内存当中占据4个字节空 - 间printf输出int值
%d,输出一个有符号的10进制整数,%u,代表输出一个无符号的10进制整数 - printf输出八进制和十六进制
%x,代表输出16进制数,%X,用大写字母方式输出16进制数
%o代表输出八进制数 - short,long,long long,unsigned int
short意思为短整数,在32位系统下是2个字节,16个比特
long意思为长整数,在32位的系统下,long都是4个字节的,在64位系统下,windows还是4个字节,unix下成了8个字节
int不管是32位系统下,还是64位系统下,不论是windows还是unix都是4个字节的
整数溢出
计算一个整数的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃
当一个小的整数赋值给大的整数,符号位不会丢失,会继承
大端对齐与小端对齐
对于arm,intel这种x86构架的复杂指令CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐
但对于unix服务器的CPU,更多是采用大端对齐的方式存放整数
char类型
1.char常量,变量
char c;定义一个char变量
‘a’,char的常量
char的本质就是一个整数,一个只有1个字节大小的整数
2.printf输出char
%c意思是输出一个字符,而不是一个整数
3.不可打印char转义符
\a,警报
\b退格
\n换行
\r回车
\t制表符
\\斜杠
\’单引号
\”双引号
?问号
4.char和unsigned char
char取值范围为-128到127
unsigned char为0-255
浮点float,double类型
1.浮点常量,变量
float在32位系统下是4个字节,double在32位系统下是8个字节
小数的效率很低,避免使用,除非明确的要计算一个小数。
2.printf输出浮点数
%f,%lf
%f是输出一个float
%lf输出一个double
3.类型限定
- const
- const是代表一个不能改变值的常量
- volatile
- 代表变量是一个可能被CPU指令之外的地方改变的,编译器就不会针对这个变量去优化目标代码
- register
- 变量在CPU寄存器里面,而不是在内存里面。但regist是建议型的指令,而不是命令型的指令
2.4 sizeof关键字
sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节
int类型
- int常量,变量
int就是32位的一个二进制整数,在内存当中占据4个字节空 - 间printf输出int值
%d,输出一个有符号的10进制整数,%u,代表输出一个无符号的10进制整数 - printf输出八进制和十六进制
%x,代表输出16进制数,%X,用大写字母方式输出16进制数
%o代表输出八进制数 - short,long,long long,unsigned int
short意思为短整数,在32位系统下是2个字节,16个比特
long意思为长整数,在32位的系统下,long都是4个字节的,在64位系统下,windows还是4个字节,unix下成了8个字节
int不管是32位系统下,还是64位系统下,不论是windows还是unix都是4个字节的
整数溢出
计算一个整数的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃
当一个小的整数赋值给大的整数,符号位不会丢失,会继承
大端对齐与小端对齐
对于arm,intel这种x86构架的复杂指令CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐
但对于unix服务器的CPU,更多是采用大端对齐的方式存放整数
char类型
1.char常量,变量
char c;定义一个char变量
‘a’,char的常量
char的本质就是一个整数,一个只有1个字节大小的整数
2.printf输出char
%c意思是输出一个字符,而不是一个整数
3.不可打印char转义符
\a,警报
\b退格
\n换行
\r回车
\t制表符
\\斜杠
\’单引号
\”双引号
?问号
4.char和unsigned char
char取值范围为-128到127
unsigned char为0-255
浮点float,double类型
1.浮点常量,变量
float在32位系统下是4个字节,double在32位系统下是8个字节
小数的效率很低,避免使用,除非明确的要计算一个小数。
2.printf输出浮点数
%f,%lf
%f是输出一个float
%lf输出一个double
3.类型限定
- const
- const是代表一个不能改变值的常量
- volatile
- 代表变量是一个可能被CPU指令之外的地方改变的,编译器就不会针对这个变量去优化目标代码
- register
- 变量在CPU寄存器里面,而不是在内存里面。但regist是建议型的指令,而不是命令型的指令
字符串格式化输出与输入
-
字符串在计算机内部的存储方式
字符串是内存中一段连续的char空间,以'\0'结尾
""(双引号)是c语言表达字符串的方式 -
printf函数,putchar函数
printf格式字符
字符 对应数据类型 含义
d int 接受整数值并将它表示为有符号的十进制整数
hd short int 短整数
hu unsigned short int 无符号短整数
o unsigned int 无符号8进制整数
u unsigned int 无符号10进制整数
x/X unsigned int 无符号16进制整数 x对应小写,X对应大写
f float或double 单精度浮点数或双精度浮点数
e/E double 科学计数法表示的数,'e'的大小写表示输入时的大小写
c char 字符型,按照ASCII码转换成对应字符
s/S char* / wchar_t * 字符串,输出字符串中的字符直到空字符('\0')
p void* 以16进制形式输出指针
% % 输出一个百分号(%)
//printf的附加格式
字符 含义
l 附加在d,u,x,o前面,表示长整数
- 左对齐
m 数据的最小宽度
0 将输出的前面补上0,直到占满指定列宽为止(不可以搭配'-'使用)
N 宽度至少N位,不够以空格填充
putchar是显示一个字符的函数
-
scanf函数与getchar函数
scanf通过键盘读取用户输入,放入变量中,记得参数一定是变量的地址(&)
int a=0; int b=0; scanf("%d",&a);//一定要用&取变量的地址 scanf("%d",&b);//一定要用&取变量的地址getchar得到用户键盘输入的字符
运算符表达式和语句
1.基本运算符
-
=
- 数据对象:泛指数据在内存的存储区域
- 左值:表示可以被更改的数据对象
- 右值:能赋给左值的量
-
+:加
-
-:减
-
*:乘
-
/:除
-
%:取余数
-
+=:加等于
-
-=:减等于
-
*=:乘等于
-
/=:除等于
-
%=:取余等于
-
++:自加1
- i++先计算表达式的值,然后在++(加一)
- ++i是先++(加一),在计算表达式的值
-
--:自减1
-
逗号运算符
int a=2; int b=3; int c=4; int d=5; int i=(a=b,c+b); //逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值运算符优先级
优先级 运算符 结合性 1 ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> 从左到右 2 ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) 从右到左 3 *, /, % 从左到右 4 +,- 从左到右 5 << >> 从左到右 6 < > <= >= 从左到右 7 == != 从左到右 8 & 从左到右 9 ^ 从左到右 10 | 从左到右 11 && 从左到右 12 || 从左到右 13 ? 从右到左 14 =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= 从右到左 15 ,(逗号运算符) 从左到右 - 复合语句
- {}代码块
- 空语句
- 只有一个;号的语句就是空语句,空语句在C语言里面和合法的,并且是在某些场合必用的
- 类型转换
- 隐式转换
- 强制转换
-

浙公网安备 33010602011771号