首页 > 编程语言 >C++基础入门笔记

C++基础入门笔记

时间:2023-03-28 15:55:44浏览次数:30  
标签:语句 入门 示例 int 笔记 运算符 C++ 结构 指针

C++基础入门

1 数据类型

C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存

1.1 整型

作用:整型变量表示的是整数类型的数据

C++中整数类型包括以下几种,区别在于所占内存空间不同

数据类型 占用空间 取值范围
short(短整型) 2字节 (-215~215-1)
int(整型) 4字节 (-231~231-1)
long(长整型) windows为4字节,linux为4字节(32位),8字节(64位) (-231~231-1)
long long(长长整型) 8字节 (-263~263-1)

2.2 sizeof关键字

作用:利用 sizeof 关键字可以统计数据类型所占内存大小

语法:sizeof(数据类型/变量)

2.3 浮点型

作用:表示小数

浮点型分为两种:float 和 double

两者的区别在于表示的有效数字范围不同

数据类型 占用空间 有效数字范围
float 4字节 7位有效数字
double 8字节 15~16位有效数字

注意:声明单精度时,建议在数字后面加上 f ,即

float f = 3.14f;

实例:科学计数法

float f1 = 3e2; // 3 * 10 ^ 2

float f2 = 3e-2; // 3 * 0.1 ^ 2

2.4 字符型

作用:表示单个字符

语法:char ch = 'a';

注意:

  1. 在显示字符型变量时,用单引号将字符括起来,不要用双引号
  2. 单引号内只能有一个字符,不可以是字符串
  • C 和 C++中字符型变量只占用1个字节
  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元

2.5 转义字符

作用:表示一些不能显示出来的ASCII字符

常用的转义字符有:\n\\\t

2.6 字符串型

作用:表示一串字符

两种风格:

  1. C风格字符串:char 变量名[] = "字符串值";
    实例:

    char str[] = "hello, world";
    cout << str << endl;
    
  2. C++风格字符串:string 变量名 = "字符串值";

    注意:使用时,需要包含头文件 #include <string>
    实例:

    string str = "hello, world";
    cout << str << endl;
    

2.7 布尔类型

作用:表示真或假的值

bool类型只有两个值:

  • true --- 真(本质是1)
  • false --- 假 (本质是0)

bool类型占1个字节大小

2.8 数据的输入

作用:用于从键盘获取数据

关键字:cin

语法:cin >> 变量

实例:

// 整型
int a = 0;
cout << "请给整型变量a赋值" << endl;
cin >> a;
cout << "整型变量a = " << a << endl;

// 浮点型
float f = 0.1f;
cout << "请给浮点型变量f赋值" << endl;
cin >> f;
cout << "浮点型变量f = " << f << endl;

// 字符型
char ch = 'a';
cout << "请给字符型变量f赋值" << endl;
cin >> ch;
cout << "字符型变量ch = " << ch << endl;

// 字符串型
string str = "hello";
cout << "请给字符串型变量str赋值" << endl;
cin >> str;
cout << "字符串型变量str = " << str << endl;

// 布尔类型
bool flag = false;
cout << "请给布尔类型变量flag赋值" << endl;
cin >> flag;
cout << "布尔类型变量flag = " << flag << endl;

2 运算符

以下几类运算符:

运算符类型 作用
算数运算符 处理四则运算
赋值运算符 将表达式的值赋给变量
比较运算符 表达式的比较,并返回一个真或假
逻辑运算符 根据表达式的值返回真或假

2.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.2 赋值运算符

作用:将表达式的值赋给变量

包括以下几个符号:

运算符 术语 示例 结果
= 赋值 a=2;b=3; a=2;b=3;
+= 加等于 a=0;a+=2; a=2;
-= 减等于 a=5;a-=3; a=2;
*= 乘等于 a=2;a*=2; a=4;
/= 除等于 a=4;a/=2; a=2;
%= 模等于 a=3;a%=2; a=1;

2.3 比较运算符

作用:用于表达式的比较,并返回一个真值或假值

有以下几个符号:

运算符 术语 示例 结果
== 相等于 4 == 3 0
!= 不等于 4 != 3 1
< 小于 4 < 3 0
> 大于 4 > 3 1
<= 小于等于 4 <= 3 0
>= 大于等于 4 >= 1 1

2.4 逻辑运算符

作用:根据表达式的值返回真或假

有以下几个符号

运算符 术语 示例 结果
! !a 如果a为假,则!a为真;如果a为真,则!a为假
&& a && b 如果a和b都为真,则结果为真,否则为假
|| a || b 如果a和b有一个为真,则结果为真,二者都为假时,结果为假

3 程序流程结构

C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据条件是否满足,有选择的执行相应代码
  • 循环结构:依据条件是否满足,循环多次执行某段代码

3.1 选择结构

3.1.1 if语句

作用:执行满足条件的语句

if语句的三种形式

  • 单行格式 if 语句
  • 多行格式 if 语句
  • 多条件 if 语句
  1. 单行格式 if 语句

    if (条件) {
        条件满足执行语句;
    }
    
  2. 多行格式 if 语句

    if (条件) {
        条件满足执行语句;
    } else {
        条件不满足执行语句;
    }
    
  3. 多条件 if 语句

    if (条件1) {
        条件1满足执行语句;
    } else if (条件2) {
        条件2满足执行语句;
    }
    ...
    else {
        都不满足执行语句;
    }
    

3.1.2 三目运算符

作用:通过三目运算符实现简单的判断

语法:表达式1 ? 表达式2 : 表达式3

3.1.3 switch语句

作用:执行多条件分支语句

语法:

switch(表达式) {
    case 结果1: 执行语句; break;
    case 结果2: 执行语句; break;
	...
        default: 执行语句; break;
}

3.2 循环结构

3.2.1 while循环语句

作用:满足循环条件,执行循环语句

语法:

while(循环条件) {
    循环语句;
}

3.2.2 do while 循环语句

作用:满足循环条件,执行循环语句

语法:

do {
    循环语句
} while(循环条件);

注意:与 while 的区别在于 do while 会先执行一次循环语句,再判断循环条件

3.2.3 for循环语句

作用:满足循环条件,执行循环语句

语法:

for (起始条件;条件表达式;末尾循环体) {
    循环语句;
}

3.3 跳转语句

3.3.1 break语句

作用:用于跳出选择结构或循环结构

break使用的时机:

  • 出现在switch条件语句中,作用是终止case并跳出switch
  • 出现在循环语句中,作用是跳出当前的循环语句
  • 出现在嵌套循环中,跳出最近的内层循环语句

3.3.2 continue语句

作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

3.3.3 goto语句

作用:无条件跳转语句

语法:goto 标记;

解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

cout << "1" << endl;
cout << "2" << endl;
goto FLAG;

cout << "3" << endl;
cout << "4" << endl;

FLAG:
cout << "5" << endl;

4 数组

4.1 一维数组

一维数组的定义方式:

  1. 数据类型 数组名[数组长度];
  2. 数据类型 数组名[数组长度] = {值1, 值2, ...};
  3. 数据类型 数组名[] = {值1, 值2, ...};

一维数组数组名

用途:

  1. 统计整个数组在内存中的长度:数组长度 sizeof(arr)/sizeof(arr[0])
  2. 获取数组在内存中的首地址

4.2 二维数组

二维数组定义方式:

  1. 数据类型 数组名[行数][列数];
  2. 数据类型 数组名[行数][列数] = {{数据1, 数据2,...}, {数据n, 数据m,...}, ...};
  3. 数据类型 数组名[行数][列数] = {数据1, 数据2, ...};
  4. 数据类型 数组名[][列数] = {数据1, 数据2, ...};

二维数组数组名

用途:

  1. 查看二维数组所占内存空间

    二维数组行数:sizeof(arr)/sizeof(arr[0])

    二维数组列数:sizeof(arr[0])/sizeof(arr[0][0])

  2. 获取二维数组首地址

5 函数

将一段经常使用的代码封装起来,减少重复代码

5.1 函数定义

包含:返回值类型、函数名、参数列表、函数体语句、return表达式

语法:

返回值类型 函数名(参数列表) {
    函数体语句;
    
    return表达式;
}

5.2 函数调用

语法:函数名(参数)

5.3 值传递

  • 所谓值传递,就是函数调用时实参将数值传入给形参
  • 值传递时,如果形参发生变化,并不会影响实参

5.4 函数的常见样式

常见的函数样式有4种:

  1. 无参无返
  2. 有参无返
  3. 无参有返
  4. 有参有返

5.5 函数的声明

作用:告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义。

  • 函数的声明可以多次,但函数的定义只能有一次

5.6 函数分文件编写

函数分文件编写一般有4个步骤

  1. 创建后缀名为.h的头文件
  2. 创建后缀名为.cpp的源文件
  3. 在头文件中写函数声明
  4. 在源文件中写函数定义

使用时在主文件中使用 #include "***.h"

示例:

// swap.h文件
#include <iostream>
using 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;
}

6 指针

可以通过指针间接访问内存,指针保存地址

6.1 指针的定义和使用

语法:数据类型 * 变量名;

示例:

int a = 10; // 定义整型变量a

int * p; // 定义指针变量

p = &a; // 指针赋值

*p = 100; //通过 *操作,解引用操作指针地址指向的空间变量

6.2 指针所占的内存空间

32位操作系统下,指针都是占4个字节空间大小,不管是什么数据类型

64位操作系统下,指针都是占8个字节空间大小

6.3 空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的,即不能进行 *p 操作

示例:

int * p = NULL;

野指针:指针变量指向非法的内存空间

示例:

int * p = (int *)0x1100;
// 访问野指针报错
cout << *p << endl;

结论:空指针和野指针都不是我们申请的空间,因此不要访问它。

6.4 const修饰指针

const修饰指针有三种情况:

  1. const修饰指针:常量指针 ,例如 const int * p = &a;
    特点:指针的指向可以修改,但指针指向的值不可以修改
    解释:*p是内存空间里的数据,p是内存空间的地址;const修饰的指针是常量,即const int 后面的(*p)不可以修改,即内存空间里的数据不可以修改(10不能改),但是p可以改变,即指向可以改变

  2. const修饰常量:指针常量,例如 int * const p = &a;

    特点:指针的指向不能更改,但是指针指向的值可以修改

  3. const既修饰指针,又修饰常量,例如 const int * const p = &a;
    特点:指针的指向和指针指向的值都不能更改

示例:

int a = 10;
int b = 10;

const int * p = &a;
*p = 20; // 错误,指针指向的值不能修改
p = &b; // 正确

int * const p = &a;
*p = 20; // 正确,指针指向的值可以修改
p = &b; // 错误,指针的指向不能修改

结论:const修饰谁,谁不能改。

6.5 指针和数组

作用:利用指针访问数组中的元素

示例:

int main() {
	// 利用指针访问数组中的元素

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	cout << "第一个元素为:" << arr[0] << endl;

	int * p = arr; // 数组名就是首地址
	cout << "利用指针访问第一个元素:" << *p << endl;

	p++; // 让指针向后偏移4个字节
	cout << "利用指针访问第二个元素:" << *p << endl;

	
	system("pause");
	return 0;
}

6.6 指针和函数

作用:利用指针作函数参数,可以修改实参的值

示例:

// 值传递
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;
}

7 结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

7.1 结构体的定义和使用

语法:struct 结构体名{ 结构体成员列表 };

通过结构体创建变量的方式有三种:

  • struct 结构体名 变量名
  • struct 结构体名 变量名 = {成员1值, 成员2值, ...}
  • 定义结构体时顺便创建变量

结构体变量创建时,struct 关键字可以省略。

示例:

// 学生类型
struct Student {
    string name;
    int age;
    int score;
};

// 通过学生类型,创建变量
struct Student s1;
s1.name = "小王";
s1.age = 8;
s1.score = 100;

struct Student s2 = {"小王", 8, 100};

struct Student {
    ...
}s3;
s3.name = "小王";
s3.age = 18;
s3.score = 100;

7.2 结构体数组

作用:将自定义的结构体放入到数组中方便维护。

语法:struct 结构体名 数组名[元素个数] = {{}, {}, ...};

示例:

// 结构体定义
struct Student {
    string name;
    int age;
    int score;
};

int main() {
    // 结构体数组
    struct Student arr[3] = {
        {"张三", 18, 90},
        {"李四", 18, 92},
        {"王五", 18, 98}
    };
}

7.3 结构体指针

作用:通过指针访问结构体中的成员

利用操作符 -> 可以通过结构体指针访问结构体属性

示例:

struct Student {
	string name;
	int age;
	int score;
};

int main() {
	//创建学生结构体变量
	Student s = {"张三", 18, 100};
	
	// 通过指针指向结构体变量
	Student * p = &s;

	// 通过指针访问结构体变量中的数据
	cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->age << endl;

	system("pause");
	return 0;
}

7.4 结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体

例如:每个老师辅导一个学生,一个老师的结构体中,记录一个学生的结构体

示例:

// 学生结构体
struct Student {
    string name;
	int age;
	int score;
};

// 教师结构体
struct Teacher {
    int id;
    string name;
    int age;
    struct Student stu;
};

int main() {
	
	Teacher t;
	t.id = 1000;
	t.name = "老王";
	t.age = 50;
	t.stu.name = "小王";
	t.stu.age = 30;
	t.stu.score = 100;
	
	cout << "老师姓名:" << t.name << "老师年龄:" << t.age << endl;

	system("pause");
	return 0;
}

7.5 结构体做函数参数

作用:将结构体作为参数向函数中传递

传递方式有两种:

  • 值传递
  • 地址传递

示例:

// 学生结构体
struct Student {
	string name;
	int age;
	int score;
};
// 值传递
void printStudent1(Student s) {
	s.age = 100;
	cout << "子函数1中打印:" << s.name << " " << s.age << " " << s.score << endl;
}

//地址传递
void printStudent2(Student * s) {
	cout << "子函数2中打印:" << s->name << " " << s->age << " " << s->score << endl;
}

int main() {
	
	Student s = { "张三", 18, 60 };
	cout << "main函数打印:" << s.name << " " << s.age << " " << s.score << endl;

	printStudent1(s);
	printStudent2(&s);
	
	system("pause");
	return 0;
}

7.6 结构体中const使用场景

作用:用 const 来防止误操作

示例:

// 学生结构体
struct Student {
	string name;
	int age;
	int score;
};

void printStudent(const Student * s) {
	// s->age = 18; // 报错,不能修改
	cout << "打印学生信息:" << s->name << " " << s->age << " " << s->score << endl;
}

int main() {
	
	Student s = { "张三", 18, 60 };
	printStudent(&s);
	
	system("pause");
	return 0;
}

标签:语句,入门,示例,int,笔记,运算符,C++,结构,指针
From: https://www.cnblogs.com/DevilK/p/17265503.html

相关文章

  • c++14 读写锁
    读的时候用共享锁,写的时候用独占锁structotherSettingModel{inlinestaticconstchar*jsonFileSavePath="../data/otherSettingModel.json";inlinesta......
  • Vue学习总结笔记(六)【转载】
    Vue学习总结笔记(六)IT_Holmes已于 2022-03-0811:07:02 修改2061收藏19分类专栏:......
  • python笔记3(字典)
    字典1.字典的创建1.{}2.dict()3.通过fromkeys创建值为空的字典2.字典元素的访问通过get()方法以a={"name":"jiachao","age":20,"school":"tongda"}为例如若结......
  • python笔记4(控制语句)
    控制语句一:选择结构A:单分支结构if(条件语句):(缩进)结果缩进:pytharm中默认四个空格=TAB键例:a=input("请输入一个小于10的数:")ifint(a)<10:print(a)运行结果:条......
  • C++智能指针、绑定器和函数对象、lambda表达式
    智能指针​ 智能指针可以保证资源的自动释放不带引用计数的智能指针auto_ptr只让最后一个指向的指针管理资源,之前的auto_ptr会被置为nullptrscoped_ptr删除了拷贝构造......
  • 幻灯片制作工具S5十分钟入门指南
    作者:chszsS5是一个幻灯片演示工具,它基于XHTML、CSS和JavaScript,对打印友好。用S5制作的幻灯片可以在主流的浏览器上运行,相当于拥有跨平台特性,即使你使用的是MacOS,也无需操......
  • C++开发方向书籍推荐
    如果你正在学习C++,那么一本好的教材或参考书可以事半功倍。以下是几本我个人推荐的C++书籍或视频:C++基础看书C++PrimerC++程序设计语言EffectiveC++MoreEffectiv......
  • 学习笔记:AC自动机
    AC自动机是一种多模匹配算法,AC自动机常常用于多模式串,单文本串的匹配算法。在此之前,你应当学会KMP&Trie。我们先给一组例子:abcdbcdcddacad这是这组例子建成的......
  • matlab学习笔记6 积分
    求和使用sum函数,注意其对于矩阵和向量的不同:对向量即数组和,对矩阵为把每列进行累加也可以使用symsum函数,其作用是对符号变量求和,即(第一个参数)公式对其因变量(第二个......
  • IMU和GPS ekf融合定位 从matlab到c++代码实现 基于位姿状态方程,松耦合
    IMU和GPS ekf融合定位从matlab到c++代码实现基于位姿状态方程,松耦合文档原创且详细YID:6745659043907933......