襄阳网站推广优化技巧,怎样做一个公众号,网站结构的规划,需要怎么办1. 指针和引用
1.1 定义和性质区别
指针是一个变量#xff0c;只不过这个变量存储的是一个地址#xff0c;指向内存的一个存储单元#xff1b;而引用跟原来的变量实质上是同一个东西#xff0c;只不过是原变量的一个别名而已。可以有const指针#xff0c;常量指针可以改…1. 指针和引用
1.1 定义和性质区别
指针是一个变量只不过这个变量存储的是一个地址指向内存的一个存储单元而引用跟原来的变量实质上是同一个东西只不过是原变量的一个别名而已。可以有const指针常量指针可以改变指向指针常量不能改变指向也可以有const引用引用的指向不能改变指针可以有多级但是引用只能是一级int **p合法 而 int a是不合法的指针的值可以为空但是引用的值不能为NULL并且引用在定义的时候必须初始化指针的值在初始化后可以改变即指向其它的存储单元而引用在进行初始化后指向的内存单元不再改变“sizeof引用”得到的是所指向的变量(对象)的大小而”sizeof指针”得到的是指针本身的大小即地址的大小指针和引用的自增()运算意义不一样
1.2 指针和引用作为函数参数进行传递时的区别
用指针传递参数可以实现对实参进行改变的目的是因为传递过来的是实参的地址因此使用*a实际上是取存储实参的内存单元里的数据即是对实参进行改变因此可以达到目的。
在将引用作为函数参数进行传递时实质上传递的是实参本身即传递进来的不是实参的一个拷贝因此对形参的修改其实是对实参的修改所以在用引用进行参数传递时不仅节约时间而且可以节约空间。、
1.3 何时使用引用和指针
指向空值可改变指向多级传递指针可用引用的地方都可用用指针反之不行。 2. 内联函数和普通函数的区别
普通函数调用时会使程序跳到另一个地址函数的地址并且在函数结束时返回。
执行函数调用指令立即存储该指令的地址并将函数参数保存到的堆栈。跳到函数起点的内存单元执行函数代码将返回值保存到寄存器中。跳回被保存指令的地址处。
1、在编译过程中内联函数在函数的调用点把函数代码全部展开所以没有标准函数的栈帧的开辟和回退。如果 调用函数的开销 函数执行的开销那么就建议写为内联函数 调用的开销函数的栈帧的开辟和回退 执行的开销函数体内代码执行的开销
2、内联函数只在本文件可见编译阶段就进行了替换所以不产生符号所以一般在头文件中定义这样就可以在其它文件调用。普通函数产生符号多个文件引用头文件会产生符号重定义的错误。 .编译阶段不编译.h文件只编译.c 或.cpp 文件
注意inline只在release版本起作用debug版本inline函数也需要栈帧的开辟和回退
思考
我们说到内联函数是编译器用函数相应的代码替代了函数调用。
那内联函数还遵循按值传递参数吗
a到底是0还是1
inline void fun(int a){a1;}int main(){int a0;fun(a);couta;return 0;
}在编译器看来
inline void fun(int a){a1;}int main(){int a0;a1; //fun(a);couta;return 0;
}输出结果 输出表明内联函数和普通函数一样都是按值传递参数。