C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点
#include <iostream> // 定义一个宏函数
#define ADD(x,y) x+y;
// 宏函数具有速度快等特点 但是写代码有些业务比较繁琐,所以C++中使用了内联函数优化 // 在定义函数前面添加一个inline把这个函数变成内联函数
inline int max(int x,int y) {
return x > y ? x : y;
}
using namespace std;
int main() {
const int a = 10; // const 修饰的是 int a
int* p = (int*)&a; // &a 的类型是 int *a 所以要强制转换
*p = 1; // 并没有改变 a 的值 依然是 1000
// 1. C和C++指针的区别
/// 为什么没有改变呢 ??
/// 这与C++的编辑器有关,实际上 a 变量的地址的值已经改变了 但是当程序使用当了 a 时候,编辑器会直接从寄存器取值
/// 而不是从地址中取值
/// 当cosnt修饰这个变量如果是一个立即数,编辑器就会把这个值直接放在寄存器中 在程序中如果出现这个变量时
/// 编辑器直接i把a 以一个立即的方式直接替换
/// 如果想要编辑器老老实实去地址中取值 使用 volite 进行修饰
int arr[a] = {11}; /// 规定了数组的长度为 10 不够的话自动补零
/// 和 C 的区别 C中const定义的变量可以通过指针修改 而C++中不行
/// 使用常量 推荐使用 const 修饰 而不是 使用宏定义 defined
/// C++ 是面向大型程序的 所以要更加严谨一些
int k;
for(k = 0;k < 10;k++){
cout << arr[k] << endl;
}
cout << a << endl << arr << endl << p << endl; // 2. 内联函数
///
int j = 10;
int z = 20;
// cout << ADD(j,z) << endl;
cout << max(++j,++z) << endl; /// 使用内联函数是和宏函数一样的 直接替换 内联函数直接在当前替换 return 值
/// 内联函数既保证了代码的运行的高效性,同时也解决了宏函数Bug的存在
/// 但是使用宏函数也是有代价的,只能使用简短的代码且没有循环且没有耗时操作的函数才可以
/// 如果内联函数比较复杂,导致代码膨胀(某个地方使用 100 万次内联函数)
/// 普通函数的调用过程 1. 函数形参的入栈 》》函数地址的跳转 》》 栈帧的开辟 》》函数的返回及返回值的保存 》》 栈帧的回退
/// 普通函数调用的优势:调用完之后,就不存在了 不像内联函数那样是直接替换代码的 执行完之后依然存在
/// 所以对于普通函数 来说,最终的可执行程序代码量不会膨胀。 return 0;
}
C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点的更多相关文章
- centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...
- centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask 第四节课
centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask 第四节课 ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- 风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击
风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击 XSS钓鱼攻击 HTTP Basic Authentication认证 大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候 ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 ...
- 第四节课-反向传播&&神经网络1
2017-08-14 这节课的主要内容是反向传播的介绍,非常的详细,还有神经网络的部分介绍,比较简短. 首先是对求导,梯度的求解.反向传播的核心就是将函数进行分解,分段求导,前向计算损失,反向计算各个 ...
- 《linux就该这么学》第四节课笔记,三章和四章开始!
第三章 (根据课本和在线培训视频排版总结,借鉴请改动) 右键可打开终端练习 3.1:输入输出重定向 输入重定向:符号 "<" ,是一种 ...
- 《linux就该这么学》第十四节课:第13章,部署DNS域名解析服务(bind服务)
(借鉴请改动) 第十二章收尾 12.2.nfs网络文件系统 RHEL7默认安装了nfs,配置文件在 /etc/export 写入格式:共享目录 允许的客户端(参数) ro ...
- C#第十四节课
函数的调用 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...
随机推荐
- 【Vue】单据打印功能
一.打印组件 需要选定区域进行打印,使用vue-print组件 组件安装 npm install vue-print-nb --save 在项目的Main.js中引入(全局注册): import Pr ...
- 【H5】13 表单 其二 如何构造
有了基础知识,我们现在更详细地了解了用于为表单的不同部分提供结构和意义的元素. 前提条件: 基本的计算机能力, 和基本的 对HTML的理解. 目标: 要理解如何构造HTML表单并赋予它们语义,以便它们 ...
- 【ECharts】02 饼图
饼状图: <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: 600px;he ...
- Win11、Win10局域网共享文件报错:共享文件夹出现,您的账号已锁定,无法访问
解决方法,见: https://blog.csdn.net/dengww_/article/details/133887598 解决方法: https://blog.csdn.net/dengww_/ ...
- 机器人控制与图网络( 利用关系归纳偏置改善泛化和控制)—— Robotic Control with Graph Networks——Exploiting relational inductive bias to improve generalization and control
英文原文: https://towardsdatascience.com/robotic-control-with-graph-networks-f1b8d22b8c86 强化学习算法是不是另一种形式 ...
- 论文《policy-gradient-methods-for-reinforcement-learning-with-function-approximation 》的阅读——强化学习中的策略梯度算法基本形式与部分证明
最近组会汇报,由于前一阵听了中科院的教授讲解过这篇论文,于是想到以这篇论文为题做了学习汇报.论文<policy-gradient-methods-for-reinforcement-learni ...
- 分段树(segment tree)的实现 —— 强化学习中 "优先级回放机制" 的重要组成部分
分段树(segment tree)是强化学习中 "优先级回放机制" 的重要组成部分.本文针对分段树(segment tree)的一个开源版本的实现来进行分析,代码地址: https ...
- 【转载】解决Nvidia-smi没有进程但是显存不释放的问题
----------------版权声明:本文为CSDN博主「打拳的土豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn ...
- maven项目打包时排除依赖包
1.背景 为了快速上传jar包到服务器,很多时候我们需要把依赖包单独独立出来,避免每次修改都传依赖包 2.实现方式 maven的pom文件,没有独立依赖包时配置如下: <build> &l ...
- 【技术积累】如何处理Feign的超时问题
在使用Feign进行微服务之间的通信时,由于网络延迟等原因,可能会出现请求超时的情况.为了解决这个问题,我们可以对Feign进行配置,设置超时时间. 配置Feign的超时时间 在使用Feign时,我们 ...