#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. 【Scala】04 对象特性Part1

    1.声明式包管理: 一个Scala文件可以声明N个包 包的意义和Java的包管理是一样的 同样也需要import导入资源声明 package pkgA { import com.oracle.nio. ...

  2. 【Hibernate】Re01 快速入门

    官网地址: http://hibernate.org/orm/releases/5.4/ 地址: https://bintray.com/hibernate/artifacts/hibernate-o ...

  3. 特斯拉在感知网络架构引入BEV三维空间转化层

    Learnging Where To Look End-to-End

  4. ffpyplayer源码编译报错:ffpyplayer/tools.pyx:182:28: Cannot assign type 'void (*)(void *, int, const char *, va_list) except * nogil' to 'void (*)(void *, int, const char *, va_list) noexcept nogil'

    编译ffpyplayer报错,具体错误如标题. 报错信息: ffpyplayer/tools.pyx:182:28: Cannot assign type 'void (*)(void *, int, ...

  5. 【转载】 机器学习数据可视化 (t-SNE 使用指南)—— Why You Are Using t-SNE Wrong

    原文地址: https://towardsdatascience.com/why-you-are-using-t-sne-wrong-502412aab0c0 ==================== ...

  6. 【转载】Ubuntu20.04安装Bazel

    原文地址: https://zhuanlan.zhihu.com/p/311406177 ====================================== sudo apt install ...

  7. 实验室深度学习服务器崩溃——Oops: 0000 [#1] SMP NOPTI

    这两天实验室的服务器总是崩溃,重启已经不能解决问题了,由于是跑深度学习的服务器,而且还是承接国家级项目的运行服务器,可以说是实验室的主要生产力了,给出报错的日志: Oct 16 09:42:33 ro ...

  8. vue之条件判断v-if与v-show

    1.背景 2.v-if简单使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  9. jQuery Eazyui的学习和使用(一)

    工作需要,需要学习使用据说非常简单好用的前端框架-----Eazyui 先看看简介吧:"jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件.jQuery E ...

  10. 圣诞节快乐,教你用shell脚本实现一颗圣诞树。【小酷炫】

    前言 圣诞节到了! 一口君在这祝各位粉丝朋友圣诞节快乐! 祝各位考研的同学金榜题名! 祝找工作的朋友offer接到爆! 祝各位老板新年大发财源! 在此一口君特地用shell脚本画了一个圣诞树! 先来看 ...