#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++内联函数的优缺点的更多相关文章

  1. 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 ...

  2. 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  第四节课 ...

  3. 风炫安全web安全学习第三十四节课 文件包含漏洞防御

    风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...

  4. 风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击

    风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击 XSS钓鱼攻击 HTTP Basic Authentication认证 大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候 ...

  5. 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1; int  &b=a;// b是a的别名,因此a和b是同一个单元 注 ...

  6. 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1;  int  &b=a;// b是a的别名,因此a和b是同一个单元 ...

  7. 第四节课-反向传播&&神经网络1

    2017-08-14 这节课的主要内容是反向传播的介绍,非常的详细,还有神经网络的部分介绍,比较简短. 首先是对求导,梯度的求解.反向传播的核心就是将函数进行分解,分段求导,前向计算损失,反向计算各个 ...

  8. 《linux就该这么学》第四节课笔记,三章和四章开始!

    第三章 (根据课本和在线培训视频排版总结,借鉴请改动)         右键可打开终端练习             3.1:输入输出重定向 输入重定向:符号 "<" ,是一种 ...

  9. 《linux就该这么学》第十四节课:第13章,部署DNS域名解析服务(bind服务)

    (借鉴请改动)  第十二章收尾  12.2.nfs网络文件系统 RHEL7默认安装了nfs,配置文件在  /etc/export  写入格式:共享目录    允许的客户端(参数)  ro        ...

  10. C#第十四节课

    函数的调用 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

随机推荐

  1. 【DingTalk】钉钉应用开发

    前言部分 最近要开发一个企业内部应用系统 无纸化办公使用钉钉,领导想在钉钉的基础上加入我们自己的应用 引入Activiti工作流引擎开发审批立项等等业务活动,做一个大一统的系统 然后让我负责开发钉钉应 ...

  2. 【Spring】04 注解实现自动装配

    1.使用注解实现自动装配 注解的基础源于JDK1.5的新特性 在Spring2.5开始支持了注解功能 如何使用? 1.导入约束 xmlns:context="http://www.sprin ...

  3. 普通用户权限运行docker

    docker安装后默认权限是管理员,在Ubuntu系统中需要使用sudo命令,但是很多时候docker的拉取操作都是写在脚步里面的,因此执行的时候十分的难搞,如果给脚本sudo权限后那么整个的环境路径 ...

  4. 学历史有什么用——视频分享:學歷史的大用:呂世浩(Shih-Hao Lu) at TEDxTaipei 2014

    网上看到的不错的视频: https://www.youtube.com/watch?v=Ap0w3PgSK7g ============================================ ...

  5. a标签设置下载设置文件名,并且设置无效的解决方法

    设置 a 标签的 download属性,可以重置 文件名.如下代码,文件名重置为 file.xlsx. <a href='http://192.168.1.1/abcd.xlsx' downlo ...

  6. 【全】CSS动画大全之按钮【b】

    效果预览 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  7. AtCoder Beginner Contest 310

    freee Programming Contest 2023(AtCoder Beginner Contest 310) - AtCoder A - Order Something Else (atc ...

  8. loj6669 Nauuo and Binary Tree 题解

    https://loj.ac/p/6669 赛时做法 先 \(n-1\) 次问出深度 逐层考虑.slv(vector<int> a,vector<int> b) 表示在点集 \ ...

  9. 【粉丝问答19】Linux内核中为啥变量没初始化就用了?你确定了解宏定义?

    @ 目录 一.问题 二.分析 三.宏定义的注意点 1. 只占用编译时间 2. 宏替换发生时机 3. 预处理包括哪些工作 四.如何快速展开复杂的宏定义? 第一步 第二步 五.练习 六.15个经典宏定义小 ...

  10. portainer控制多个docker

    打开docker的远程访问(参考下方博客) 觉得不安全可以配置 使用 TLS 加密 https://www.cnblogs.com/hongdada/p/11512901.html 使用新版本port ...