解决方案资源管理器中创建源代码,否则不能运行
一个项目一个main
多main解决方案
#include2.1.变量、常量与关键字using namespace std; int main() { //变量的定义 //语法:数据类型 变量名 = 初始值 int a = 10; cout << "a = " << a << endl; system("pause"); return 0; }
变量同java
常量两种方式
#define DAY 7 const int a = 2;
关键字:系统预留词,不能用
2.2.命名规则:同java 3.数据类型用于分配内存
语法: sizeof( 数据类型 / 变量)
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
语法: cin >> 变量
int a = 0; cout << "请输入整型变量:" << endl; cin >> a; cout << a << endl;3.1 整型
| 数据类型 | 占用空间 | 取值范围 |
|---|---|---|
| short(短整型) | 2字节 | (-2^15 ~ 2^15-1) |
| int(整型) | 4字节 | (-2^31 ~ 2^31-1) |
| long(长整形) | Windows为4字节,Linux为4字节(32位),8字节(64位) | (-2^31 ~ 2^31-1) |
| long long(长长整形) | 8字节 | (-2^63 ~ 2^63-1) |
| 数据类型 | 占用空间 | 有效数字范围 |
|---|---|---|
| float | 4字节 | 7位有效数字 |
| double | 8字节 | 15~16位有效数字 |
语法:char ch = 'a';
- 占一个字节,java占2个
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
- 有转义字符
两种表示
char str1[] = "hello world";
3.5 布尔型注意:C++风格字符串,需要加入头文件==#include
==
string str = "hello world";
bool类型占1个字节大小
bool flag = true;
1.算术
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| + | 正号 | +3 | 3 |
| - | 负号 | -3 | -3 |
| + | 加 | 10 + 5 | 15 |
| - | 减 | 10 - 5 | 5 |
| * | 乘 | 10 * 5 | 50 |
| / | 除 | 10 / 5 | 2 |
| % | 取模(取余) | 10 % 3 | 1 |
| ++ | 前置递增 | a=2; b=++a; | a=3; b=3; |
| ++ | 后置递增 | a=2; b=a++; | a=3; b=2; |
| – | 前置递减 | a=2; b=–a; | a=1; b=1; |
| – | 后置递减 | a=2; b=a–; | a=1; b=2; |
2.比较
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| == | 相等于 | 4 == 3 | 0 |
| != | 不等于 | 4 != 3 | 1 |
| < | 小于 | 4 < 3 | 0 |
| > | 大于 | 4 > 3 | 1 |
| <= | 小于等于 | 4 <= 3 | 0 |
| >= | 大于等于 | 4 >= 1 | 1 |
| 3.逻辑 | |||
| 4.赋值 | |||
| 与java一样 |
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
4.2 循环
while循环语句
do…while循环语句
for循环语句
用于跳出选择结构或者循环结构
break使用的时机:
- 出现在switch条件语句中,作用是终止case并跳出switch
跳过本次循环中余下尚未执行的语句
gotoint main() {
cout << "1" << endl;
goto FLAG;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
FLAG:
cout << "5" << endl;
system("pause");
return 0;
}
5.数组
长度通过sizeof()结合除法计算
5.1 一维数组 5.1.1 定义方法int score[10];
//如果{}内不足10个数据,剩余数据用0补全
int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
数组名是常量,因此不可以赋值
用途:
- 可以统计整个数组在内存中的长度 sizeof(arr)
- 可以获取数组在内存中的首地址 (int)arr
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout <<"数组内存空间" << sizeof(arr) << endl;
cout << "数组首地址" << (int)arr << endl;
cout << "数组首元素地址地址" << (int)&arr[0] << endl;
5.2 二维数组
int arr[2][3];
int arr2[2][3] =
{
{1,2,3},
{4,5,6}
};
int arr3[2][3] = { 1,2,3,4,5,6 };
int arr4[][3] = { 1,2,3,4,5,6 };
总结:在定义二维数组时,如果初始化了数据,可以省略行数
cout << "二维数组大小: " << sizeof(arr2) << endl; cout << "二维数组首地址:" << arr2 << endl; cout << "二维数组第一行地址:" << arr2[0] << endl; cout << "二维数组第一个元素地址:" << &arr2[0][0] << endl;
二维数组首地址:0055FA40
二维数组第一行地址:0055FA40
二维数组第一个元素地址:0055FA40
与java没啥区别,少了可访问修饰符
函数的定义一般主要有5个步骤:
1、返回值类型
2、函数名
3、参数表列
4、函数体语句
5、return 表达式
6.2 函数分文件书写参数是值传递
无返回值 void
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的同名源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义,并声明头文件#include "swap.h"
- 使用的地方也要声明头文件
示例:
//swap.h文件 #includeusing namespace std; //实现两个数字交换的函数声明 void swap(int a, int b);
//swap.cpp文件
#include "swap.h"
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
//main函数文件
#include "swap.h"
int main() {
int a = 100;
int b = 200;
swap(a, b);
system("pause");
return 0;
}
7.指针
7.1 基本概念
- 普通变量存放的是数据,指针变量存放的是地址
指针的作用:
- 可以通过指针间接访问内存
- 可以利用指针变量保存地址
内存编号是从0开始记录的,一般用十六进制数字表示
指针定义 指向的类型 * 变量名
对变量取地址 &
取指针存储地址的变量 *
//指针定义语法: 数据类型 * 变量名 ; int * p; p = &a; //指针指向变量a的地址 //通过*操作指针变量指向的内存 cout << "*p = " << *p << endl;7.2 指针所占内存空间
windows: 4个字节
7.3 空指针和野指针linux32位操作系统下是4个字节
空指针:指针变量指向内存中编号为0的空间,即指向null
用途:初始化指针变量
注意:访问会报错,内存编号0 ~255为系统占用内存,不允许用户访问
野指针:指针变量指向非法的内存空间
7.4 const 与指针const修饰指针有三种情况
- const修饰常量 — 常量指针 const int * p1 可改指向,不能通过p改*p值
- const修饰指针 — 指针常量 int * const p2 = &a; 不能改指向,可以通过p改*p值
- const即修饰指针,又修饰常量
const int* p1 = &a; p1 = &b; int* const p2 = &a; *p2 = 20;7.5 指针与数组
总结:当数组名传入到函数作为参数时,被退化为指向首元素的指针
#include指针与函数#include using namespace std; int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int* p = arr; //指向数组的指针 for (int i = 0; i < 10; i++) { //利用指针遍历数组 cout << *p << endl; p++; } system("pause"); return 0; }
指针传递能修改实参的值
1.传地址
swap2(&a, &b); //地址传递会改变实参
2.交换值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
8.结构体
结构体属于用户自定义的数据类型
8.1 定义与使用通过结构体创建变量的方式有三种:
1.声明
- struct 结构体名 变量名
2.赋值 - struct 结构体名 变量名 = { 成员1值 , 成员2值…}
- 定义结构体时顺便创建变量
3.访问
操作符 ‘’.‘’
//结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
}stu3; //结构体变量创建方式3
int main() {
//结构体变量创建方式1
struct student stu1; //struct 关键字可以省略
stu1.name = "张三";
stu1.age = 18;
stu1.score = 100;
//结构体变量创建方式2
struct student stu2 = { "李四",19,60 };
//3
stu3.name = "王五";
stu3.age = 18;
stu3.score = 80;
cout << "姓名:" << stu3.name << " 年龄:" << stu3.age << " 分数:" << stu3.score << endl;
system("pause");
return 0;
}
8.2 结构体数组
struct student arr[3]=
{
{"张三",18,80 },
{"李四",19,60 },
{"王五",20,70 }
};
8.3 结构体指针
- 利用操作符 -> 可以通过结构体指针访问结构体属性
struct student stu2 = { "李四",19 };
struct student* p = &stu2;
p->score = 80;
8.4 结构体嵌套
struct teacher
{
//成员列表
int id; //职工编号
string name; //教师姓名
int age; //教师年龄
struct student stu; //子结构体 学生
};
t1.stu.name = "张三";
t1.stu.age = 18;
t1.stu.score = 100;
8.5 结构体做参数
//值传递
void printStudent(student stu )
{
stu.age = 28;
cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;
}
//地址传递
void printStudent2(student *stu)
{
stu->age = 28;
cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age << " 分数:" << stu->score << endl;
}
结构体与const
const student *stu



