1 CPP11基础篇(快速学习)

news2024/11/24 3:43:52

 

 

另外还有 long double 不少于double 不低于double

注意:

在VS和Linux中 long double占用的内存空间分别是8和16个字节

 c++11原始字面量

 

 

void的关键字

在C++中,void表示为无类型 主要有3个用途

1、函数的返回值用void 表示函数没有返回值

2、函数的参数填void,表示函数不需要参数(或者大多数都是让参数列表空着)

3、函数的形参用void* 表示接受任意数据类型的指针。

C++内存模型

堆和栈的主要区别:

1 管理方式不同:栈是系统自动管理的,在出作用域时,将自动被释放;堆需要手动释放,若程序中不释放,程序结束时由操作系统回收。

2 空间大小不同:堆内存的大小受限于物理内存空间;而栈空间小的可怜,一般只有8M(可以修改系统参数)

3 分配方式不同:堆是动态分配的;栈有静态分配和动态分配(都是自动释放)。

4 分配效率不同:栈是系统提供的数据结构,计算机在底层提供了对栈的支持,进栈和出栈有专门的指令,效率比较高;堆由C++函数库提供的。

5 是否产生碎片:对于栈来说,进栈和出栈都是有着严格的顺序(先进后出),不会产生碎片;而堆频繁的分配和释放,会造成内存空间的不连续,容易产生碎片,太多的碎片会导致性能的下降。

6 增长方向不同:栈向下增长,以降序分配内存地址;堆向上增长,以升序分配内存地址。

动态分配内存new和delete

 

意:

1 动态分配出来的内存没有变量名,只能通过指向它的指针来操作内存中的数据

2 如果动态分配的内存不用了,必须用delete释放它,否则有可能用尽系统的内存,最终导致程序崩溃,也可能引起系统崩溃。

3 动态分配的内存生命周期与程序相同,程序退出时,如果没有释放,系统将自动回收。

4 就算指针的作用域已失效,所指向的内存也不会释放。(因为可以多个指针指向同一个内存,如果其中一个指针失效而释放内存,别的指针就会发生错误)

5 用指针跟踪已分配的内存时,不能跟丢

二级指针

 

 

 

 

 

 函数指针

#include "iostream"
using namespace std;
void func(int no, string str)
{
    cout << "hello" << no << str << endl;
}
void test()
{
    int a;
    char b;
    cout << "a=" << (void *)&a << endl;
    cout << "b=" << (void *)&b << endl;

    //函数指针
    //普通调用
    int no = 3;
    string msg = "你好";
    func(no, msg);
    //函数指针调用
    void (*f)(int, string); //声明函数的函数指针
    f = func;               //对函数指针赋值,语法是   函数指针名 = 函数名
    f(no, msg);             //用函数指针名调用函数  C++
    (*f)(no, msg);          //用函数指针名调用函数  C
}
void zs()
{
    cout << "zs" << endl;
}
void ls()
{
    cout << "ls" << endl;
}
void show(void (*pf)())
{
    cout << "hello" << endl;
    pf();
    cout << "world" << endl;
}
void test2()
{
    show(zs);
}

int sum(int a, int b)
{
    return a + b;
}

void show2(int (*pf)(int, int), int a, int b)
{
    cout << "show2 start" << endl;
    int sum = pf(a, b);
    cout << "sum=" << sum << endl;
    cout << "show2 end" << endl;
}

void test3()
{
    show2(sum, 2, 3);
}
int main()
{
    test();
    test2();
    test3();
    return 0;
}
a=0x61fd68
b=0x61fd67
hello3你好
hello3你好
hello3你好
hello
zs
world
show2 start
sum=5
show2 end

 

 

#include "iostream"
#include <cstring>//需要包含整个头文件
using namespace std;

void test()
{
    int arr[3] = {1, 2, 3};
    for (int i = 0; i < 3; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    //清空数组
    memset(arr, 0, sizeof(arr));

    for (int i = 0; i < 3; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    //复制数组
    int arr2[3] = {22, 33, 44};
    int copyArr[sizeof(arr2) / sizeof(arr2[0])];
    memcpy(copyArr, arr2, sizeof(arr));
    for (int i = 0; i < 3; i++)
    {
        cout << copyArr[i] << " ";
    }
    cout << endl;
}
int main()
{
    test();
    return 0;
}
1 2 3 
0 0 0 
22 33 44 

一维数组和指针

指针的算术

将一个整型变量加1后,其值将增加1.

但是将指针变量(地址的值)加1后,增加的量等于它指向的数据类型的字节数。

#include "iostream"
using namespace std;

void test()
{
    char a;
    cout << "sizeof(char)=" << sizeof(char) << endl;
    short b;
    cout << "sizeof(short)=" << sizeof(short) << endl;
    int c;
    cout << "sizeof(int)=" << sizeof(int) << endl;
    double d;
    cout << "sizeof(double)=" << sizeof(double) << endl;

    cout << "a的地址是:" << (void *)&a << endl;
    cout << "a的地址+1是:" << (void *)(&a + 1) << endl;
    cout << "b的地址是:" << (void *)&b << endl;
    cout << "b的地址+1是:" << (void *)(&b + 1) << endl;
    cout << "c的地址是:" << (void *)&c << endl;
    cout << "c的地址+1是:" << (void *)(&c + 1) << endl;
    cout << "d的地址是:" << (void *)&d << endl;
    cout << "d的地址+1是:" << (void *)(&d + 1) << endl;
}
int main()
{
    test();
    return 0;
}
sizeof(char)=1
sizeof(short)=2
sizeof(int)=4
sizeof(double)=8
a的地址是:0x61fdef
a的地址+1是:0x61fdf0
b的地址是:0x61fdec
b的地址+1是:0x61fdee
c的地址是:0x61fde8
c的地址+1是:0x61fdec
d的地址是:0x61fde0
d的地址+1是:0x61fde8

数组的地址

1 数组在内存中占用的空间是连续的

2 C++将数组名解释为数组第0个元素的地址

3 数组第0个元素的地址和数组首地址的取值是相同的

4 数组第n个元素的地址是:数组首地址+n

5 C++编译器把数组名[下标] 解释为 *(数组首地址+下标)

数组的本质:

数组是占用连续空间的一块内存,数组名被解释为数组第0个元素的地址。C++操作这块内存有两种方法:数组解释法和指针表示法,它们是等价的。

数组名不一定会被解释为地址:

在多数情况下,C++将数组名解释为数组的第0个元素的地址,有一种情况比较例外,就是sizeof运算符用于数组名时,将返回整个数组占用内存空间的字节数。

经常听到有些人说数组名就是地址,这种说法非常的不专业。

还有就是数组名时常量,不可以修改,不要说成指针,指针的值是可以修改的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改oracle11g的awr快照参数

1、select * from v$version; 2、select * from dba_hist_wr_control; 检查当前系统的保留时间为8天,1小时采样一次. 3、这里设置每半个小时收集一次&#xff0c; 收集到的数据保留15天&#xff0c;单位都是秒。 exec dbms_workload_repository.modify_snapshot_settings(ret…

[附源码]计算机毕业设计的图书互换系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

web前端网页设计期末课程大作业:旅游网页主题网站设计——三亚旅游网页设计(6个页面) HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

类装载器ClassLoader 、执行引擎ExecutionEngine【Java培训】

1. 定义 负责加载class文件&#xff0c;class文件在文件开头有特定的文件标示&#xff0c;并且ClassLoader只负责class文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由Execution Engine决定。 Java培训 2. 类加载器分类 虚拟机自带的加载器启动类加载器&#xff0…

【现代机器人学】学习笔记六:闭链运动学

这一章的内容主要讲并联机器人的相关算法&#xff0c;内容在全书中属于比较少&#xff0c;仅仅介绍概念的章节。 恰好部门中有一位同事就是专门做并联机器人出身的博士&#xff0c;也请他帮忙看了一下内容&#xff0c;但他觉得写书的这个人可能也不是非常懂并联机器人&#xf…

Java集合——Collection

Collection集合 Collection接口下主要有三大子接口 List Queue Set 1. List List是有序可重复集合&#xff0c;根据索引下标来访问元素 List接口常见的三个实现类&#xff1a;ArrayList 、LinkedList、Vector 特点&#xff1a; 集合中的元素允许重复集合中的元素有序&…

UE4 Cook指定平台资源

内容烘焙 | 虚幻引擎文档 (unrealengine.com) 虚幻引擎以内部使用的特定格式存储内容资源&#xff0c;如PNG用于存储纹理 数据&#xff0c;WAV用于音频数据。但是&#xff0c;该内容需要针对各平台转换为不同的格式&#xff0c; 因为平台使用专有格式&#xff0c;或者平台不支…

Revit中“幕墙网格”编辑斜向网格和柱断墙梁

一、Revit中“幕墙网格”编辑斜向网格 我们可以为幕墙添加任意间距的水平和垂直的网格线&#xff0c;但是对于斜向网格线我们却只能通过设置其实例属性中的角度来控制其生成一系列等间距的斜向网格&#xff0c;那么如果遇到不等间距的斜向网格线我们应该如何绘制呢? 首先通过设…

博宜OJ练习题基础题目中个别问题的题(欢迎一起讨论)

中国博宜练习题个别问题&#xff0c;望讨论前言题目1解题思路提交后正确代码&#xff1a;个人写的错误代码题目2正确代码2个人写的错误代码2以上是个人目前遇到的两个问题&#xff0c;不知道是直接使用“max”函数的问题 还是什么&#xff0c;如果是“max”函数问题第一个测试点…

多线程与高并发(二)

【锁的底层实现】&#xff1a; 【 简介 】&#xff1a; JDK早期的时候是重量级的 &#xff0c; 会去找OS系统申请锁 &#xff0c;效率非常低。 后来的改进——《锁升级过程》。 【锁升级过程】&#xff1a; sync( Object ) 【偏向锁】&#xff1a; markword记录这个线程ID&…

[附源码]Python计算机毕业设计Django基于JEE平台springbt技术的订餐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

以太网 MSTP多实例生成树的简介、MSTP与RSTP、STP之间的联系、MSTP BPDU格式介绍、MSTP关键名词介绍)

2.12.0 以太网 MSTP多实例生成树&#xff08;简介、MSTP与RSTP、STP联系、MSTP BPDU格式、MSTP关键名词介绍&#xff09; 主要参考&#xff1a;华为S2750, S5700, S6700 V200R005(C00&C01&C02&C03) 产品文档 《MSTP基本概念》 MSTP快速生成树简介MSTP关键名词介绍1…

springboot+mybatis+mysql实现的个人博客管理系统(功能包含登录,栏目管理、文章管理、评论管理、系统设置、用户管理、发布博客、评论等)

博客目录springbootmybatis实现的个人博客管理系统实现功能截图系统功能使用技术代码完整源码springbootmybatis实现的个人博客管理系统 本系统是一个个人博客管理系统&#xff0c;比较新的框架springbootmybatis实现&#xff0c;分为普通用户和管理员&#xff0c;普通用户可以…

【软件测试】测试人接手新应用程序怎么测?看看这几个方法......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 应用程序很复杂的&a…

三、数据链路层(三)差错控制

目录 3.1检错编码 3.1.1奇偶校验码 3.1.2循环冗余码&#xff08;CRC&#xff09; 3.2纠错编码 3.2.1海明码 传输差错可分为两种&#xff1a; 位错&#xff1a;帧中某些位出现了差错&#xff0c;也称比特差错、误码。帧错&#xff1a;帧的丢失、重复或失序等错误。 通常利…

面试题:数据结构和算法

1、时间复杂度解释一下 算法的时间复杂度&#xff0c;用来度量算法的运行时间&#xff0c;记作: T(n) O(f(n))。它表示随着 输入大小n 的增大&#xff0c;算法执行需要的时间的增长速度可以用 f(n) 来描述。 当 T(n) c&#xff0c;c 为一个常数的时候&#xff0c;我们说这个…

[附源码]Python计算机毕业设计Django基于vue+mysql开发的考试系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java web 2022跟学尚硅谷(九)书城项目

Java web 2022跟学尚硅谷九书城项目需求分析数据库设计ER图书城1.0简单部署项目类图相关代码UserControllerUserDAOImplUserDAOBookCartItemOrderOrderItemUserUserServiceImplUserServiceapplicationContext.xml书城1.1实现功能1. 用户登录2. 首页图书列表展示3. 首页价格筛选…

Vue3-ElemenPlu,全栈开发后台系统1-1-2-9第一章,第二章前端系统架构设计

Vue3+ElementPlus Lo2+MongoDB 菜单按钮权限,JWT认证,审批流,常规的CRUD,模块化,组件化 技术栈: 架构设计,vue3全家桶,koa2, 权限: Role-Based A

[附源码]Node.js计算机毕业设计辅导员班级量化管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…