1.注释
(1)单行注释 ://
(2)多行注释 :/**/
2.变量
(1)语法: 数据类型 变量名 = 变量初始值;
int a = 10;
3.常量
(1)#define宏常量:#define 常量名 常量值
(2)const修饰的变量:const 数据类型 常量名 = 常量值
4.关键字
5.标识符命名规则(不能用关键字)
(1)标识符由字母、数字、下划线组成;
(2)第一个字符必须为字母或下划线;
(3)区分大小写。
6.数据类型(给变量分配合适的内存空间)
(1)整型
(2)sizeof关键字:sizeof(数据类型/变量)
(3)浮点型
单精度:float 4字节 7位有效数字
双精度:double 8字节 15-16位有效数字
(4)字符型:用于显示单个字符,用单引号括起来
(5)bool类型
(6)数据的输入:cin >> 变量
7.运算符
(1)算术运算符
(2)赋值运算符
(3)比较运算符
(4)逻辑运算符
与:&&; 或:||; 非:!
8.流程结构
(1)顺序结构
(2)选择结构
三目运算符:表达式1 ? 表达式2 :表达式3
switch语句:判断的时候只能是整型或者字符型,不可以是一个区间
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
(3)循环结构
- while循环
- do...while: do{循环语句} while(循环条件);
- for 循环:
for (起始表达式;条件表达式;末尾循环体){
循环语句
}
- break:用于跳出选择结构或者循环结构
出现在switch条件语句中,终止case并跳出switch;
出现在循环语句中,跳出当前循环;
出现在嵌套循环中,跳出最近的内层循环。
- continue:在循环语句中,跳过本次循环中未执行的语句,直接开始下次循环
- goto : goto 标记;跳转到标记位置
9.数组
(1)一维数组定义
数据类型 数组名[数组长度]
数据类型 数组名[数组长度] = {值}
数据类型 数组名[ ] = {值}
(2)二维数组定义
数据类型 数组名 [行数] [列数];
数据类型 数组名[行数] [列数]= { {数据1,数据2.。。。} ,{数据1,数据2.。。。}}
数据类型 数组名[行数] [列数] = {数据1,数据2.。。。}
数据类型 数组名[] [列数] = {数据1,数据2.。。。}
10.函数
(1)函数定义
返回值类型 函数名(参数列表)
{
函数体语句;
return 表达式;
}
(2)函数调用:函数名称 (参数)
(3)值传递:函数的形参发生改变,并不会影响实参
//值传递:实现两个数进行交换
#include <iostream>
using namespace std;
void swap (float num1, float num2) {
cout << "交换前:";
cout << "num1 = " << num1 << " ";
cout << "num2 = " << num2 << endl;
float temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后:";
cout << "num1 = " << num1 << " ";
cout << "num2 = " << num2 << endl;
}
int main() {
float a, b;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
//当做值传递时,函数的形参发生改变,并不会影响实参
swap(a, b);
cout << "a = " << a << " ";
cout << "b = " << b << " ";
system("pause");
return 0;
结果:
(4)函数的常见样式
- 无参无返
- 有参无返
- 无参有返
- 有参有返
(5)函数的声明:数据类型 函数名(参数) ;
注:声明可以写多次,定义只能有一次
(6)函数的分文件编写
- 创建后缀名为.h的头文件;
- 创建后缀名为.CPP的源文件;
- 在头文件中写函数的声明;
- 在源文件中写函数的定义。
11.指针 通过指针直接访问内存,用指针变量保存地址
(1)指针变量定义语法: 数据类型 * 变量名;
(2)指针占用 内存:在32位操作系统下,占用4字节空间;在64位操作系统下,占用8字节。
(3)空指针
- 空指针:指针变量指向内存中编号为0的空间
- 用途:初始化指针变量
- 注意:空指针指向的内存是不可以访问的(0`255之间的内存编号是系统占用的)
(4)野指针:指针变量指向非法的内存空间
(5)const修饰指针
- const修饰指针 ——常量指针——指针的指向可以修改,但指针指向的值不可以修改:const int *p = &a;
- const修饰常量 ——指针常量:int *const p = &a;
- const既修饰指针又修饰常量 :const int *const p = &a;
(6)指针和数组
//指针和数组
//利用指针访问数组中的元素
#include <iostream>
using namespace std;
int main() {
//创建数组
int arr[5] = { 1,2,3,4,5 };
int * p = arr;//取数组首地址
cout << "利用指针访问数组中的元素:";
for (int j = 0; j < 5; j++) {
cout << *( p + j ) << " ";
}
system("pause");
return 0;
}
(7)指针和函数
//指针和函数
//实现两个数字进行交换
#include <iostream>
using namespace std;
void swap2(int *p1, int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void swap1(int num1, int num2) {
cout << "交换前:";
cout << "num1 = " << num1 << " ";
cout << "num2 = " << num2 << endl;
int temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后:";
cout << "num1 = " << num1 << " ";
cout << "num2 = " << num2 << endl;
}
int main() {
int a = 10;
int b = 20;
//1.值传递
//当做值传递时,函数的形参发生改变,并不会影响实参
swap1(a, b);
cout << "a = " << a << " ";
cout << "b = " << b << endl;
//2.地址传递
//地址传递会影响(改变)实参
cout << "a = " << a << " ";
cout << "b = " << b << endl;
swap2(&a, &b);
cout << "a = " << a << " ";
cout << "b = " << b << " ";
system("pause");
return 0;
}
12.结构体 用户自定义的数据类型,允许用户存储不同的数据类型
(1)结构体定义: struct 结构体名{ 结构体成员}
- struct 结构体名 变量名
- struct 结构体名 变量名 = {成员1值,成员2值....}
- 定义结构体时顺便创建变量
//结构体的定义
#include <iostream>
using namespace std;
//1.创建学生数据类型:姓名,班级,学号
//语法:struct {成员列表}
struct student {
string name;
string class_stu;
string num;
}s3;
//2.通过学生类型创建具体学生信息
int main() {
//(1) struct student s1
//给s1属性赋值,通过“ . ”访问结构体变量的属性
struct student s1;//struct关键字可以省略
//student s1;
s1.name = "hhy";
s1.class_stu = "初一二班";
s1.num = "20181212345";
//(2) struct student s2 = {,,,}
struct student s2 = { "李四","初一三班","20221209141" };
//(3) 在定义结构体时顺便创建结构体变量
s3.name = "张三";
s3.class_stu = "初一四班";
s3.num = "22221209141";
system("pause");
return 0;
}
(2)结构体数组
struct 结构体名 数组名【元素个数】= {{},{},{}}
(3)结构体指针 :通过指针访问结构体中的成员
利用操作符 “->” 可以通过结构体指针访问结构体属性
(4)结构体嵌套结构体
//结构体嵌套结构体
// 每个老师辅导一个学学员,一个老师的结构体中,记录一个学生的结构体
#include <iostream>
using namespace std;
// 1.定义学生结构体
struct student {
string name;
string class_stu;
string num;
};
// 2,定义老师结构体
struct teacher {
int id;
string name;
struct student stu;//子结构体
};
int main() {
// 3.创建老师
struct teacher t = { 1,"老李"};
t.stu = { "张三","电子1802","20181209140" };
cout << "老师id:" << t.id
<< " " << "老师姓名:" << t.name
<< " " << "老师带的学生姓名:" << t.stu.name
<< " " << "班级:" << t.stu.class_stu
<< " " << "学号:" << t.stu.num << endl;
system("pause");
return 0;
}
(5)结构体做函数参数
- 值传递
- 地址传递
//结构体做函数参数
#include <iostream>
using namespace std;
// 1.定义学生结构体
struct student {
string name;
string class_stu;
string num;
};
// 2,将学生传入到一个参数中,打印学生信息
//2.1值传递
void printstu1(struct student s) {
s.num = "1";
cout << "值传递的打印结果:"
<< " " << "姓名:" << s.name
<< " " << "班级:" << s.class_stu
<< " " << "学号:" << s.num << endl;
}
//2.2地址传递
void printstu2(struct student *p) {
p->num = "10";
cout << "地址传递的打印结果:"
<< " " << "姓名:" << p-> name
<< " " << "班级:" << p->class_stu
<< " " << "学号:" << p->num << endl;
}
int main() {
// 3.创建结构体变量
struct student s = { "张三","初二一班","21209140" };
cout << "main函数中的打印结果:"
<< " " << "姓名:" << s.name
<< " " << "班级:" << s.class_stu
<< " " << "学号:" << s.num << endl;
printstu1(s);
cout << "值传递后main函数中的打印结果:"
<< " " << "姓名:" << s.name
<< " " << "班级:" << s.class_stu
<< " " << "学号:" << s.num << endl;
printstu2(&s);
cout << "地址传递后main函数中的打印结果:"
<< " " << "姓名:" << s.name
<< " " << "班级:" << s.class_stu
<< " " << "学号:" << s.num << endl;
system("pause");
return 0;
}
(6)结构体中const使用场景 :用const 来防止误操作