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;
}