当前位置: 首页 > news >正文

C++与C基础重叠部分

Cmake

  • CPP程序开发过程
    • 计算机硬件—>机器语言—>汇编—>cpp
    • cpp—>机器(gcc)
    • Make(makefile)—>本地智能批处理翻译机制
    • Cmake—>跨平台生成不同设备上的makefile进行执行

Cpp基础学习

基本知识

  • 基本格式
#include<iostream>
using namespace std;
int main(){cout << "hello cpp" << endl;system("pause");return 0;
}
  • 变量
    • 意义
      • 方便管理内存,给一段指定内存空间起名
    • 16进制可以表示一个内存空间—>给内存起名称a—>a就是变量
    • 创建
      • 数据类型 变量名 = 变量初始值
  • 常量
    • 不可修改的数据
    • 定义方式
      • #define宏定义—#define 常量名 常量值
      • const修饰变量 const 数据类型 常量名 = 常量值
  • 关键字
    • 有特殊含义且不能被再被命名—不要用关键字进行命名
  • 标识符名规则
    • 标识符不可以是关键字
    • 标识符只能由字母数字下划线
    • 第一个字符不能为数字
    • 标识符区分大小写

数据类型

  • 存在意义—给变量分配合适的内存空间
  • sizeof—输出字节—取决于多少位的操作系统—统计数据类型所占内存大小
    • 语法—sizeof(数据类型或者变量)
  • 有效数字—所有展示数字的位数
  • 实型—浮点型
    • float—4字节
    • double—8字节
    • 默认定义数据是double因此,float f1 = 3.14f这样才能真正定义为float
    • 一般显示6位有效数字
  • 字符型—表示单个字母—占用一个字节—char
    • 单引号
    • 字符型变量并不是把字符本身放入内存中存储,而是将对用的ascii编码放入到存储单元
    • 查看ascii—cout<< (int)ch << endl;
    • 常见
      • a—97
      • A—65
  • 转义字符
    • 用于表示一些不能显示出来的ascii字符
    • 常见
      • \n—换行
      • \t—水平制表—8个字符空间
      • //—反斜杠/必须输出两个
  • 字符串型
    • 两种风格
      • char 变量名[] = “字符串” — C风格
      • string 变量名 = “字符串” — CPP风格 — #include
  • 布尔数据类型
    • true
    • false
  • 数据的输入
    • 用于从键盘获取数据
      • cin >> 变量
int a = 0;
cout<< "请输入a: \n" << endl; 
cin >> a;

新型类型转换方式

  • c语言—(type)(expression)
  • 缺点
    • 这种类型转换容易产生不良后果
    • 在源码中无法快速定位所有使用强制类型转换的语句
  • cpp将强制类型转换分为四种不同类型
    • 语法
      • ***_cast(expression)
  • 四个不同的关键字
    • static_cast—静态类型转换
      • 用于基本类型间的转换
      • 不能用于基本类型指针间的转换
      • 用于有继承关系类对象之间的转换和类指针之间的转换
    • const_cast
      • 用于去除变量的只读属性
      • 强制转换的目标类型必须是指针引用
    • dynamic_cast—只能用于指针
      • 用于有继承关系的类指针
      • 用于有交叉关系的类指针间转换
      • 具有类型检查功能
      • 需要虚函数的支持
    • reinterpret_cast
      • 用于指针类型间的强制转换
      • 用于整数和指针类型间的强制转换

运算符

  • 算术运算符
  • 赋值运算符
  • 比较运算
  • 逻辑运算

流程结构

  • 选择结构
    • if
    • 三目运算符
    • switch
      • switch中表达式类型只能是整型或者字符型
      • switch不可以判断区间
  • 循环结构
    • while
    • dowhile
    • for
  • 跳转语句
    • break
    • continue
    • goto
      • goto 标记

一维数组

  • 特点
    • 连续内存空间
    • 每个数据元素都是相同的
  • 定义
    • 数据类型 数组名[数组长度]
    • 数据类型 数组名[数组长度] = {数值1, 数值2…}
    • 数据类型 数组名[] = {值1, 值2,…};
  • 数组名的用途
    • 可以统计整个数组在内存中的长度
    • 可以获取数组在内存中的首地址
int arr[] = {1,2,3}
int len = sizeof(arr)
int ev_len = sizeof(arr)/sizeof(arr[0])
  • 数组首地址访问的两种形式
    • cout << arr
    • cout << &arr[0]
    • 元素和地址访问不一样

二维数组

  • 定义方式
    • 数据类型 数组名称[行数][列数]
    • 数据类型 数组名称[行数][列数] = {{1,2,3},{2,3,4}}
    • 数据类型 数组名称[行数][列数] = {1,2,3,2,3,4}
    • 数据类型 数组名[][列数] = {1,2,3,2,3,4}
  • 数组名称
    • 查看二维数组所占内存空间
    • 查看首地址

函数

  • 值传递问题
    • 形参发生变化实参不会变化
  • 函数声明
    • int max(int a, int b);
  • 分文件编写
    • .h文件中包含.cpp中的所有库函数依赖,只声明不定义
    • .cpp关联后只需要定义即可

指针

  • 概念
    • 通过指针间接访问内存
    • 通过指针变量记录内存的地址编号
    • 指针就是用来保存地址
  • 定义指针
    • 数据类型 *指针变量名
  • 初始化方式
    • 数据类型 *p = &变量
  • *p代表解应用—可以修改数据
  • 指针所占的内存大小
    • 32位操作系统下占用4个字节—sizeof后不论什么类型只要是指针,占的内存只依赖于操作系统的大小
  • const修饰指针
    • const修饰指针—常量指针—const int * q = &a—指针的指向可以改,但是指针指向的数值不能改
    • const修饰常量—指针常量—int * const p = &a—指针的指向不可以改,但是指针指向的数值可以改
    • const修饰指针同时又修饰常量—const int * const p = &a—指针的指向和指针指向的值都不可以改

指针和其他的配合使用的配合使用

  • 利用指针访问数组中的元素—数组名就是数组第一个元素的地址
  • 指针和函数—地址传递—实现对调用主函数变量的修改

结构体

  • 概念—结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
struct student
{string name;int age;
};
// 直接定义
struct student
{string name;int age;
}ss;
  • 调用和变量定义
struct student s1;
student ss; //可省略struct
struct student s2 = {...};
s1.name = "zhangsan";
  • 结构体数组
struct student s1[] = {{"zhangsan", 18},{"lisi", 22}
};
s1[1].age = 32;
  • 结构体指针
struct student s1[] = {{"zhangsan", 18},{"lisi", 22}
};
struct student * ss = s1;
cout << ss->age << endl;
  • 结构体嵌套结构体
struct student {string name;int age;
};
struct teacher t1{string name;int age;struct student s1;
};
  • 结构体做函数参数
    • 值传递—形参改变实参不变
    • 地址传递—形参变实参也变
    • 将值传递改为地址传递可以保证传参过程中开销较小
    • 但是这种方式会导致函数内可以改变结构体信息
      • 解决—const加入
      • 在函数形参加上const即可 void test(const int *s)
http://www.lryc.cn/news/8540.html

相关文章:

  • 神经网络基础部件-卷积层详解
  • 【计算机网络】HTTPS协议原理
  • 21岁,华科博士在读,我的赛事Top经验
  • 基于ThinkPHP6.0+Vue+uni-app的多商户商城系统好用吗?
  • Linux中断
  • Excel+SQL实战项目 - 餐饮业日销售情况分析仪
  • 电商导购CPS,京东联盟如何跟单实现用户和订单绑定
  • Redis学习【6】之BitMap、HyperLogLog、Geospatial操作命令 (1)
  • JAVA实现心跳检测【长连接】
  • python3.9安装和pandas安装踩坑处理
  • 2023.2.15每日一题——867. 转置矩阵
  • 【人脸识别】Partial-FC:让你在一台机器上训练1000万个id人脸数据集成为可能!
  • 递归方法读取任意深度的 JSON 对象的键值
  • 黑马redis学习记录:分布式锁
  • 对React-Fiber的理解,它解决了什么问题?
  • 【Linux】初学Linux你需要掌握这些基本指令(二)
  • Linux中VI/VIM 编辑器
  • PDF怎么转换成Word?两种PDF免费转Word方法推荐
  • 极兔一面:Dockerfile如何优化?注意:千万不要只说减少层数
  • SpringBoot+Vue实现酒店客房管理系统
  • 自适应多因素认证:构建不可破解的企业安全防线|身份云研究院
  • 阶段二8_集合ArrayList_学生管理系统_详细步骤
  • 一篇解决Linux 中的负载高低和 CPU 开销并不完全对应
  • 关于IDM下载器,提示:一个假冒的序列号被用来注册……idea项目文件路径报红
  • JVM - 高效并发
  • 中小学智慧校园电子班牌系统源码 Saas云平台模式
  • 记录一次服务器被攻击的经历
  • Python解题 - CSDN周赛第29期 - 争抢糖豆
  • C代码中访问链接脚本中的符号
  • MySQL 8:MySQL索引