网站开发找谁,深圳集团网站建设哪家好,wordpress小蜜蜂,淘宝客如何新建网站点击蓝字关注我们C 基础1、引用和指针的区别#xff1f;初始化:引用在定义的时候必须进行初始化#xff0c;并且不能够改变指针在定义的时候不一定要初始化#xff0c;并且指向的空间可变访问逻辑不同:通过指针访问对象, 用户需要使用间接访问通过引用访问对象, 用户只需使用… 点击蓝字关注我们C 基础1、引用和指针的区别初始化:引用在定义的时候必须进行初始化并且不能够改变指针在定义的时候不一定要初始化并且指向的空间可变访问逻辑不同:通过指针访问对象, 用户需要使用间接访问通过引用访问对象, 用户只需使用直接访问, 编译器负责将其处理为间接访问运算结果不同:传指针的实质是传值传递的值是指针内储存的变量地址传引用的实质是传地址传递的是变量的地址。指针通过下标运算结果是指针所指值为基地址加上偏移, 且基地址可变.引用通过下标运算结果是引用的是数组才能有这个操作.自增运算结果不同sizeof运算的结果不同下标运算:函数参数:多级: 有多级指针但是没有多级引用只能有一级引用。2、从汇编层去解释一下引用参考两个语句mov ptr [ebp-4], 1 lea eax, [ebp-4] mov dword ptr [ebp-8], eax a的地址为ebp-4, b的地址为ebp-8, 栈地址由高到底分配.可以发现这个和指针的复制几乎一样,所以引用其实是通过指针来实现的3、C中的指针参数传递和引用参数传递指针参数传递的本质是值传递, 传递的值是对象的地址, 在调用时形参会在函数栈中开辟空间用于存放传递过来的对象的地址,此时形参相当于是实参的副本, 对形参的任何操作都不会反映到实参上, 但是通过形参间接访问对象的修改是会反应到函数之外的.引用参数传递的本质是传地址, 传递的是实参变量的地址, 首先形参会在函数栈中开辟空间用来存放实参变量的地址, 然后对该形参的任何操作都会被处理未间接寻址,即通过形参中的地址访问主调函数中的实参变量, 因为通过形参的任何操作都将被应用于主调函数中.从逻辑上引用相当于对变量起了一个别名, 通过该别名可以对变量进行直接访问, 由编译器负责将直接访问转换为间接访问; 而指针访问变量都是间接访问.4、形参与实参的区别形参属于函数内部的局部变量, 在调用函数时才会分配内存, 在函数调用之后会被释放掉, 因此在函数内部才有效实参可以使常量, 表达式, 函数等, 无论是何种类型,在函数调用时都必须有一个确定的值,以便把函数的值传递给形参实参和形参的个数一定要严格匹配(当然可以忽略有默认值形参), 通常情况下函数类型也是应该严格匹配的, 但是允许隐式类型变换,如果类中定义了零参数构造函数,甚至可以使用空初始化列表{}的方式调用零参数构造函数实参到形参的传递是单向的形参类型为非指针非引用, 则传递方式为值传递则, 形参为实参的副本, 对形参的任何修改都不会反应在主调函数中4-2 三种传递方式值传递是通过拷贝构造函数实现的指针传递是属于值传递,实参指针向形参传递的是对象的地址引用传是属于传地址, 相当于对变量起了一个别名, 本质上和指针传递类似传递的都是对象的地址,区别在于对该引用形参的任何操作都会被处理为间接云芝, 也就是会反应到调用函数中5、static的用法主要可以分为五个类型: 全局静态变量, 局部静态变量, 静态函数, 静态成员变量, 静态成员函数当定义它的函数或者语句块结束的时候作用域结束。但是当局部静态变量离开作用域后并没有销毁而是仍然驻留在内存当中只不过我们不能再对它进行访问直到该函数再次被调用并且值不变在全局变量前加上关键字static全局变量就定义成一个全局静态变量.内存中的位置静态存储区在整个程序运行期间一直存在。初始化未经初始化的全局静态变量会被自动初始化为0(对于自动对象,如果没有显示初始化,会调用零参数构造函数,如不存在则编译失败);作用域全局静态变量在声明他的文件之外是不可见的准确地说是从定义之处开始到文件结尾。在局部变量之前加上关键字static局部变量就成为一个局部静态变量。内存中的位置静态存储区初始化未经初始化的全局静态变量会被自动初始化为0(对于自动对象,如果没有显示初始化,会调用零参数构造函数,如不存在则编译失败)作用域作用域仍为局部作用域局部静态变量全局静态变量静态函数在函数返回类型前加static函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的但静态函数只是在声明他的文件当中可见不能被其他文件所用。函数的实现使用static修饰那么这个函数只可在本cpp内使用不会同其他cpp中的同名函数引起冲突warning不要再头文件中声明static的全局函数不要在cpp内声明非static的全局函数如果你要在多个cpp中复用该函数就把它的声明提到头文件里去否则cpp内部声明需加上static修饰类的静态成员在类中静态成员可以实现多个对象之间的数据共享并且使用静态数据成员还不会破坏隐藏的原则即保证了安全性。因此静态成员是类的所有对象中共享的成员而不是某个对象的成员。对多个对象来说静态数据成员只存储一处供所有对象共用类的静态函数静态成员函数和静态数据成员一样它们都属于类的静态成员它们都不是对象成员。因此对静态成员的引用不需要用对象名。在静态成员函数的实现中不能直接引用类中说明的非静态成员可以引用类中说明的静态成员(这点非常重要)。*如果静态成员函数中要引用非静态成员时可通过对象来引用。从中可看出调用静态成员函数使用如下格式::();*参数表静态成员函数名类名不能被virtual修饰,静态成员函数没有this 指针虚函数的实现是为每一个对象分配一个vptr 指针而vptr 是通过this 指针调用的所以不能为virtual虚函数的调用关系this-vptr-ctable-virtual function6、静态变量什么时候初始化静态局部变量和全局变量一样数据都存放在全局区域所以在主程序之前编译器已经为其分配好了内存但在C 和C中静态局部变量的初始化节点又有点不太一样。在C中初始化发生在代码执行之前编译阶段分配好内存之后就会进行初始化所以我们看到在C 语言中无法使用变量对静态局部变量进行初始化在程序运行结束变量所处的全局内存会被全部回收。而在C中初始化时在执行相关代码时才会进行初始化主要是由于C引入对象后要进行初始化必须执行相应构造函数和析构函数在构造函数或析构函数中经常会需要进行某些程序中需要进行的特定操作并非简单地分配内存。所以 C标准规定为全局或静态对象是有首次用到时才会进行构造 并通过atexit()来管理。在程序结束按照构造顺序反方向进行逐个析构。所以在 C中是可以使用变量对静态局部变量进行初始化的。7、const?一般可以分为如下六种类型const变量: 表明标了为const类型, 通常需要被初始化否则后面将不能被修改, 对该变量的修改操作都会被编译器阻止.const指针对象: 标明该指针为普通的左值类型可以进行修改, 但是不能通过该变量修改做指向的对象, 则通过该指针只能访问const类型的成员函数.const引用: 它所绑定的对象不能被修改const形参: 和普通的实参分类一样分为const 变量, const指针对象, const 引用, 作用也类似,表示不能修改该变量.const返回值: 通常是为了表明返回值是一个const类型防止返回值被修改, 或则被当做左值放在赋值运算的左边const成员函数: 是指成员函数不会修改类对象的任何成员变量, 如果返回值为对象成员的引用则必须返回const引用, 同时const成员函数不能调用非const函数, 其主要是因为const成员函数所持有的this指针是一个const类型的指针, 因为不能调用非const类型的成员函数,8、const 成员函数的理解和应用① const Stock amp; Stock::topval (②const Stock amp; s) ③const① 处const确保返回的Stock 对象在以后的使用中不能被修改② 处const确保此方法不修改传递的参数s③ 处const保证此方法不修改调用它的对象const 对象只能调用const 成员函数,不能调用非const 函数9、指针和const的用法当const 修饰指针时由于const 的位置不同它的修饰对象会有所不同。(常指针对象) int const p2 中const 修饰p2 的值,所以理解为p2 的值不可以改变即p2 只能指向固定的一个变量地址但可以通过p2 读写这个变量的值。顶层指针表示指针本身是一个常量(常指针) int const *p1 或者const int *p1 两种情况中const 修饰p1所以理解为p1 的值不可以改变即不可以给*p1 赋值改变p1 指向变量的值但可以通过给p 赋值不同的地址改变这个指针指向。底层指针表示指针所指向的变量是一个常量。10、mutable如果需要在const 成员方法中修改一个成员变量的值那么需要将这个成员变量修饰为mutable。即用mutable 修饰的成员变量不受const 成员方法的限制;可以认为mutable 的变量是类的辅助状态但是只是起到类的一些方面表述的功能修改他的内容我们可以认为对象的状态本身并没有改变的。实际上由于const_cast的存在这个概念很多时候用处不是很到了。通常情况下const成员函数时不能被类对象的成员变量的, 但是可以修改被mutable修饰的成员变量通常我们任务mutable位类的辅助状态, 只是类的一些表诉功能, 修改它不会改变对象的状态通常我们可以是用const_cast在const成员函数中修改所有的成员变量*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步