C++基础
2021/7/1 20:25:26
本文主要是介绍C++基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
教程笔记
C++中的基础语法与C基本一样,C++是包含C的所有语法的
C++概览
1. 初识C++
Hello C++
#include <iostream> using namespace std; int main() { cout << "Hello C++" << endl; system("pause"); return 0; }
-
c++中的关键字
asm do if return typedef auto double inline short typeid bool dynamic_cast int signed typename break else long sizeof union case enum mutable static unsigned catch explicit namespace static_cast using char export new struct virtual class extern operator switch void const false private template volatile const_cast float protected this wchar_t continue for public throw while default friend register true delete goto reinterpret_cast try 提示:在给变量或者常量起名称时候,不要用C++得关键字,否则会产生歧义。
2. 数据类型
2.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) |
2.2 实型(浮点型)
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15~16位有效数字 |
2.3 字符型
作用:字符型变量用于显示单个字符
语法:char ch = 'a';
注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号
注意2:单引号内只能有一个字符,不可以是字符串
2.4 字符串型
作用:用于表示一串字符
- C风格字符串:
char str[] = "stringValue"
- C++风格字符串:
string str = "stringValue"
注意:C++风格字符串,需要加入头文件 #include < string >
2.5 布尔类型
bool类型只有两个值:
- true ----真(本质是1)
- false ----假(本质是0)
bool类型整1个字节大小
3. 运算符
- 算术运算符:
+
-
*
/
%
++
(前后缀)--
(前后缀) - 赋值运算符:
=
+=
-=
*=
/=
%=
- 比较运算符:
==
!=
<
>
<=
>=
- 逻辑运算符:
!
&&
||
程序流程结构
C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
1. 选择结构
-
if else
: 包括多层嵌套 -
三目运算符:
表达式1 ? 表达式2 : 表达式3
-
switch
语句
2. 循环结构
while
循环do ... while
循环for
循环
3. 跳转语句
break
语句,跳出当前循环或选择结构continue
语句,在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环goto
语句,跳转至标号出执行,不建议使用
数组
1. 一维数组
一维数组定义的三种方式:
数据类型 数组名[ 数组长度 ];
数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
数据类型 数组名[ ] = { 值1,值2 ...};
2. 二位数组(多维数组)
二维数组定义的四种方式:
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
函数
c++的函数和c的函数不同点
1.函数默认参数
在c++中,函数的形参列表中的形参可以有默认值
语法: 返回值类型 函数名 (参数 = 默认值) {}
示例:
int func(int a, int b = 10) { return a * b; } int main() { cout << "ret = " << func(10) << endl; cout << "ret = " << func(10,2) << endl; system("pause"); return 0; }
注意: 默认参数必须放在参数列表的最后,调用时默认参数不传参使用默认的
传入参数,使用传入的实参
2. 函数占位参数
c++中函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补该位置
语法: 返回值类型 函数名 (数据类型) {}
void func(int a, int) { cout << "this is func" << endl; } int main() { func(10, 10); //占位参数必须填补 system("pause"); return 0; }
3. 函数重载
函数重载的条件:
- 同一作用域下
- 函数名称相同
- 函数参数类型 或者 个数不同 或者 顺序不同
注意: 函数的返回值不可以作为函数重载的条件
示例:
void func() { cout << "func()" << endl; } void func(int a) { cout << "func(int a)" << endl; } void func(double a) { cout << "func(double a)" << endl; } void func(int a, double b) { cout << "func(int a, double b)" << endl; } void func(double b, int a) { cout << "func(double a, int b)" << endl; } //函数返回值不可以作为函数重载条件 //int func(double b, int a) //{ // cout << "func(double a, int b)" << endl; // // return 0; //} int main() { func(); func(10); func(3.14); func(10, 3.14); func(3.14, 10); system("pause"); return 0; }
函数重载碰到默认参数
void func(int a, int b = 10) { cout << "func(int a, int b = 10)" << endl; } void func(int a) { cout << "func(int a)" << endl; } int main() { int a = 10; //func(a); //错误,默认参数产生歧义 system("pause"); return 0; }
指针
1. 基本概念
指针作用: 可以通过指针间接访问内存
- 内存编号从0开始记录的,一般用十六进制数字标识
- 可以用指针变量保存地址
2. 指定的定义
语法: 数据类型* 变量名
int main() { int a = 10; int* p; p = &a; //p指向变量a的地址 cout << &a << endl; //打印数据a的地址 cout << p << endl; //打印指针p的地址 cout << "*p" << *p << endl; //通过*操作打印指针指向的地址的数据 system("pause"); return 0; }
说明:所有指针类型在32位操作系统下是4个字节,在64位系统下是8个字节
3. 空指针和野指针
空指针: 指针变量指向内存编号为0的空间
用途: 初始化指针变量
注意: 空指针指向的内存是不可以访问的
示例:
int main() { int* p = nullptr; cout << *P << endl; //程序运行异常,空指针指向的内存地址是不允许用户访问 system("pause"); return 0; }
野指针: 指针变量指向非法内存空间
示例:
int main() { int* p = (int*)0x1100; //访问野指针报错 cout << *p << endl; system("pause"); return 0; }
总结:空指针和野指针都不是我们申请的空间,因此不要访问。
4. const修饰指针
const修饰指针有三种情况:
- const修饰指针 --- 常量指针
- const修饰常量 --- 指针常量
- const既修饰指针又修饰常量
示例:
int main(){ int a = 10; int b = 10; //const修饰的是指针,指针指向可以改,指针指向的值不可以更改 const int* p1 = &a; p1 = &b; //正确 //*p1 = 100; //错误 //const修饰的是常量,指针指向不可以改,指针指向的值可以更改 int* const p2 = &a; //p2 = &b; //错误 *p2 = 100; //正确 //const既修饰指针又修饰常量 const int* const p3 = &a; //p3 = &b; //错误 //*p3 = 100; //错误 system("pause"); return 0;}
技巧: 看const右侧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量
5. 指针和数组
利用指针访问数组中元素,数组名就是数组的首地址
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;}
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;}int main(){ int a = 10; int b = 20; //值传递,不会改变实参 swap1(a, b); cout << "a = " << a << endl; cout << "b = " << b << endl; //地址传递,会改变实参 swap2(&a, &b); cout << "a = " << a << endl; cout << "b = " << b << endl; system("pause"); return 0;}
这篇关于C++基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享