C++
|字数总计:4.8k|阅读时长:21分钟|阅读量:
基础
注释
作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码
提示:编译器在编译代码时,会忽略注释的内容
变量
作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量名 = 初始值;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include<iostream> using namespace std;
int main() {
int a = 10;
cout << "a = " << a << endl;
system("pause");
return 0; }
|
注意:C++在创建变量时,必须给变量一个初始值
,否则会报错
常量
作用:用于记录程序中不可更改的数据
C++定义常量两种方式
#define
宏常量: #define
常量名 常量值`
- const修饰的变量
const 数据类型 常量名 = 常量值
- 通常在变量定义前加关键字const,修饰该变量为常量,不可修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #define day 7
int main() {
cout << "一周里总共有 " << day << " 天" << endl;
const int month = 12; cout << "一年里总共有 " << month << " 个月份" << endl;
system("pause");
return 0; }
|
标识符命名规则
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- 标识符中字母区分大小写
sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法: sizeof( 数据类型 / 变量)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int main() {
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
cout << "int 类型所占内存空间为: " << sizeof(int) << endl;
cout << "long 类型所占内存空间为: " << sizeof(long) << endl;
cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl;
system("pause");
return 0; }
|
整型结论:short < int <= long <= long long
浮点型
作用:用于表示小数
浮点型变量分为两种:
- 单精度float
- 双精度double
两者的区别在于表示的有效数字范围不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| int main() {
float f1 = 3.14f; double d1 = 3.14;
cout << f1 << endl; cout << d1<< endl;
cout << "float sizeof = " << sizeof(f1) << endl; cout << "double sizeof = " << sizeof(d1) << endl;
float f2 = 3e2; cout << "f2 = " << f2 << endl;
float f3 = 3e-2; cout << "f3 = " << f3 << endl;
system("pause");
return 0; }
|
字符串型
作用:用于表示一串字符
两种风格
- C风格字符串:
char 变量名[] = "字符串值"
示例:
1 2 3 4 5 6 7 8 9
| int main() {
char str1[] = "hello world"; cout << str1 << endl;
system("pause");
return 0; }
|
注意:C风格的字符串要用双引号括起来
- C++风格字符串:
string 变量名 = "字符串值"
示例:
1 2 3 4 5 6 7 8 9
| int main() {
string str = "hello world"; cout << str << endl;
system("pause");
return 0; }
|
注意:C++风格字符串,需要加入头文件==#include
==
布尔类型
作用:布尔数据类型代表真或假的值
bool类型只有两个值:
- true — 真(本质是1)
- false — 假(本质是0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int main() {
bool flag = true; cout << flag << endl;
flag = false; cout << flag << endl;
cout << "size of bool = " << sizeof(bool) << endl;
system("pause");
return 0; }
|
数据的输入
作用:用于从键盘获取数据
关键字:cin
语法: cin >> 变量
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 32 33 34
| int main(){
int a = 0; cout << "请输入整型变量:" << endl; cin >> a; cout << a << endl;
double d = 0; cout << "请输入浮点型变量:" << endl; cin >> d; cout << d << endl;
char ch = 0; cout << "请输入字符型变量:" << endl; cin >> ch; cout << ch << endl;
string str; cout << "请输入字符串型变量:" << endl; cin >> str; cout << str << endl;
bool flag = true; cout << "请输入布尔型变量:" << endl; cin >> flag; cout << flag << endl; system("pause"); return EXIT_SUCCESS; }
|
if语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| int main() {
int score = 0; cout << "请输入一个分数:" << endl; cin >> score;
cout << "您输入的分数为: " << score << endl;
if (score > 600) { cout << "我考上了一本大学!!!" << endl; }
system("pause");
return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600) { cout << "我考上了一本大学" << endl; } else { cout << "我未考上一本大学" << endl; }
system("pause");
return 0; }
|
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
| int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600) { cout << "我考上了一本大学" << endl; } else if (score > 500) { cout << "我考上了二本大学" << endl; } else if (score > 400) { cout << "我考上了三本大学" << endl; } else { cout << "我未考上本科" << endl; }
system("pause");
return 0; }
|
switch语句
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 32 33 34
| int main() {
int score = 0; cout << "请给电影打分" << endl; cin >> score;
switch (score) { case 10: case 9: cout << "经典" << endl; break; case 8: cout << "非常好" << endl; break; case 7: case 6: cout << "一般" << endl; break; default: cout << "烂片" << endl; break; }
system("pause");
return 0; }
|
while循环语句
1 2 3 4 5 6 7 8 9 10 11 12 13
| int main() {
int num = 0; while (num < 10) { cout << "num = " << num << endl; num++; }
system("pause");
return 0; }
|
do…while
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int main() {
int num = 0;
do { cout << num << endl; num++;
} while (num < 10);
system("pause");
return 0; }
|
for
1 2 3 4 5 6 7 8 9 10 11
| int main() {
for (int i = 0; i < 10; i++) { cout << i << endl; }
system("pause");
return 0; }
|
break
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| int main() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (j == 5) { break; } cout << "*" << " "; } cout << endl; }
system("pause");
return 0; }
|
continue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int main() {
for (int i = 0; i < 100; i++) { if (i % 2 == 0) { continue; } cout << i << endl; }
system("pause");
return 0; }
|
goto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int main() {
cout << "1" << endl;
goto FLAG;
cout << "2" << endl; cout << "3" << endl; cout << "4" << endl;
FLAG:
cout << "5" << endl;
system("pause");
return 0; }
|
一维数组
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| int main() {
int score[10];
score[0] = 100; score[1] = 99; score[2] = 85;
cout << score[0] << endl; cout << score[1] << endl; cout << score[2] << endl;
int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
for (int i = 0; i < 10; i++) { cout << score2[i] << endl; }
int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
for (int i = 0; i < 10; i++) { cout << score3[i] << endl; }
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组所占内存空间为: " << sizeof(arr) << endl; cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl; cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
system("pause");
return 0; }
|
函数
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
| int add(int num1, int num2) { int sum = num1 + num2; return sum; }
int main() {
int a = 10; int b = 10; int sum = add(a, b); cout << "sum = " << sum << endl;
a = 100; b = 100;
sum = add(a, b); cout << "sum = " << sum << endl;
system("pause");
return 0; }
|
值传递
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
| void swap(int num1, int num2) { cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl;
int temp = num1; num1 = num2; num2 = temp;
cout << "交换后:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl;
}
int main() {
int a = 10; int b = 20;
swap(a, b);
cout << "mian中的 a = " << a << endl; cout << "mian中的 b = " << b << endl;
system("pause");
return 0; }
|
函数的声明
告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
int max(int a, int b); int max(int a, int b);
int max(int a, int b) { return a > b ? a : b; }
int main() {
int a = 100; int b = 200;
cout << max(a, b) << endl;
system("pause");
return 0; }
|
函数的分文件编写
函数分文件编写一般有4个步骤
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
1 2 3 4 5 6
| #include<iostream> using namespace std;
void swap(int a, int b);
|
1 2 3 4 5 6 7 8 9 10 11 12
| #include "swap.h"
void swap(int a, int b) { int temp = a; a = b; b = temp;
cout << "a = " << a << endl; cout << "b = " << b << endl; }
|
1 2 3 4 5 6 7 8 9 10 11 12
| #include "swap.h" int main() {
int a = 100; int b = 200; swap(a, b);
system("pause");
return 0; }
|
指针变量的定义和使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| int main() {
int a = 10;
int * p;
p = &a; cout << &a << endl; cout << p << endl;
cout << "*p = " << *p << endl;
system("pause");
return 0; }
|
指针变量和普通变量的区别
- 普通变量存放的是数据,指针变量存放的是地址
- 指针变量可以通过” * “操作符,操作指针变量指向的内存空间,这个过程称为解引用
总结1: 我们可以通过 & 符号 获取变量的地址
总结2:利用指针可以记录地址
总结3:对指针变量解引用,可以操作指针指向的内存
指针所占内存空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int main() {
int a = 10;
int * p; p = &a;
cout << *p << endl; cout << sizeof(p) << endl; cout << sizeof(char *) << endl; cout << sizeof(float *) << endl; cout << sizeof(double *) << endl;
system("pause");
return 0; }
|
总结:所有指针类型在32位操作系统下是4个字节
空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
示例1:空指针
1 2 3 4 5 6 7 8 9 10 11 12 13
| int main() {
int * p = NULL;
cout << *p << endl;
system("pause");
return 0; }
|
示例2:野指针
1 2 3 4 5 6 7 8 9 10 11 12
| int main() {
int * p = (int *)0x1100;
cout << *p << endl;
system("pause");
return 0; }
|
总结:空指针和野指针都不是我们申请的空间,因此不要访问。
const修饰指针
const修饰指针有三种情况
- const修饰指针 — 常量指针
- const修饰常量 — 指针常量
- const即修饰指针,又修饰常量
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int main() {
int a = 10; int b = 10;
const int * p1 = &a; p1 = &b;
int * const p2 = &a; *p2 = 100;
const int * const p3 = &a;
system("pause");
return 0; }
|
技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量
指针和数组
作用:利用指针访问数组中元素
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int * p = arr;
cout << "第一个元素: " << arr[0] << endl; cout << "指针访问第一个元素: " << *p << endl;
for (int i = 0; i < 10; i++) { cout << *p << endl; p++; }
system("pause");
return 0; }
|
指针和函数
作用:利用指针作函数参数,可以修改实参的值
示例:
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
| void swap1(int a ,int b) { int temp = a; a = b; b = temp; }
void swap2(int * p1, int *p2) { int temp = *p1; *p1 = *p2; *p2 = temp; }
int main() {
int a = 10; int b = 20; swap1(a, b);
swap2(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
system("pause");
return 0; }
|
总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递
结构体定义和使用
语法:struct 结构体名 { 结构体成员列表 };
通过结构体创建变量的方式有三种:
- struct 结构体名 变量名
- struct 结构体名 变量名 = { 成员1值 , 成员2值…}
- 定义结构体时顺便创建变量
示例:
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 32 33 34 35
| struct student { string name; int age; int score; }stu3;
int main() {
struct student stu1;
stu1.name = "张三"; stu1.age = 18; stu1.score = 100;
cout << "姓名:" << stu1.name << " 年龄:" << stu1.age << " 分数:" << stu1.score << endl;
struct student stu2 = { "李四",19,60 };
cout << "姓名:" << stu2.name << " 年龄:" << stu2.age << " 分数:" << stu2.score << endl;
stu3.name = "王五"; stu3.age = 18; stu3.score = 80;
cout << "姓名:" << stu3.name << " 年龄:" << stu3.age << " 分数:" << stu3.score << endl;
system("pause");
return 0; }
|
总结1:定义结构体时的关键字是struct,不可省略
总结2:创建结构体变量时,关键字struct可以省略
总结3:结构体变量利用操作符 ‘’.’’ 访问成员
结构体指针
作用:通过指针访问结构体中的成员
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| struct student { string name; int age; int score; };
int main() {
struct student stu = { "张三",18,100, };
struct student * p = &stu;
p->score = 80;
cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
system("pause");
return 0; }
|
总结:结构体指针可以通过 -> 操作符 来访问结构体中的成员
选择创建新项目–>空项目
函数
如果不体现生命,main方法 在函数的前面就会报错
有了函数的声明,main方法,可以写在函数的前面
函数的民生,可以写很多次,但是实现(定义)只能写一次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <iostream> using namespace std;
int max(int num1, int num2); int max(int num1, int num2); int max(int num1, int num2);
int main() { int sum = max(1, 2);
cout << "计算器的结果:" << sum << endl;
system("pause"); return 0; }
int max(int num1, int num2) { int sum = num1 + num2;
return sum; }
|
常量指针
特点:指针的指向可以改,指针指向的值不可以改
1 2 3
| const int * p = &a; *0 = 20 错误 p = &b 对的
|
指针常量
特点:指针的指向不可以改,指针指向的值可以改
1 2 3
| int * const p = &a; *0 = 20 对的 p = &b 错误
|
const 同时修饰指针和常量
1 2 3
| const int * const p = &a; *0 = 20 错的 p = &b 错误
|
例子:
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 32 33 34
| #include <iostream> using namespace std;
int main() {
int a = 10; int b = 20;
int* p = &a; cout << "第一个测试指针a地址:"<<p << "===" << *p << endl; int* p111 = &b; cout << "第一个测试指针b地址:"<< p111 << "===" << *p111 << endl;
const int* p1 = &a; cout << "第二个测试指针地址:" << p1 << "===" << *p1 << endl; p1 = &b; cout << "第二个测试指针地址:" << p1 << "===" << *p1 << endl;
int* const p2 = &a; cout << "第三个测试指针地址:" << p2 << "===" << *p2 << endl; *p2=30; cout << "第三个测试指针地址:" << p2 << "===" << *p2 << endl;
const int* const p3 = &a;
system("pause"); return 0; }
|