网站风格分析,windows搭建php网站,视频播放网站开发,谷歌推广教程1.指针就是数据或代码在内存中的地址#xff0c;指针变量指向的就是内存中的数据或代码。这里有一个关键词需要强调#xff0c;就是内存#xff0c;指针只能指向内存#xff0c;不能指向寄存器或者硬盘#xff0c;因为寄存器和硬盘没法寻址。 2.其实 C 代码中的大部分内容…1.指针就是数据或代码在内存中的地址指针变量指向的就是内存中的数据或代码。这里有一个关键词需要强调就是内存指针只能指向内存不能指向寄存器或者硬盘因为寄存器和硬盘没法寻址。 2.其实 C 代码中的大部分内容都是放在内存中的例如定义的变量、创建的对象、字符串常量、函数形参、函数体本身、new或malloc()分配的内存等这些内容都可以用来获取地址进而用指针指向它们。除此之外还有一些我们平时不太留意的临时数据例如表达式的结果、函数的返回值等它们可能会放在内存中也可能会放在寄存器中。一旦它们被放到了寄存器中就没法用获取它们的地址了也就没法用指针指向它们了。 3.寄存器离 CPU 近并且速度比内存快将临时数据放到寄存器是为了加快程序运行。但是寄存器的数量是非常有限的容纳不下较大的数据所以只能将较小的临时数据放在寄存器中。int、double、bool、char 等基本类型的数据往往不超过 8 个字节用一两个寄存器就能存储所以这些类型的临时数据通常会放到寄存器中而对象、结构体变量是自定义类型的数据大小不可预测所以这些类型的临时数据通常会放到内存中。 4.常量表达式由于不包含变量没有不稳定因素所以在编译阶段就能求值。编译器不会分配单独的内存来存储常量表达式的值而是将常量表达式的值和代码合并到一起放到虚拟地址空间中的代码区。从汇编的角度看常量表达式的值就是一个立即数会被“硬编码”到指令中不能寻址。 5.引用和指针在本质上是一样的引用仅仅是对指针进行了简单的封装。引用和指针都不能绑定到无法寻址的临时数据并且 C 对引用的要求更加严格在某些编译器下甚至连放在内存中的临时数据都不能指代。
着重看下这里 6. 引用 与 const组合在一起类似 const int r1就变成了常引用 将常引用绑定到临时数据时编译器采取了一种妥协机制编译器会为临时数据创建一个新的、无名的临时变量并将临时数据放入该临时变量中然后再将引用绑定到该临时变量。注意临时变量也是变量所有的变量都会被分配内存。
7.编译器禁止指针指向不同类型的数据 引用Reference和指针Pointer在本质上是一样的引用仅仅是对指针进行了简单的封装「类型严格一致」这条规则同样也适用于引用。 7. const 引用与类型转换 当对引用添加 const 限定后情况就又发生了变化编译器允许引用绑定到类型不一致的数据当引用的类型和数据的类型不一致时如果它们的类型是相近的并且遵守「数据类型的自动转换」规则那么编译器就会创建一个临时变量并将数据赋值给这个临时变量这时候会发生自动类型转换然后再将引用绑定到这个临时的变量这与「将 const 引用绑定到临时数据时」采用的方案是一样的。 8. 给引用添加 const 限定后不但可以将引用绑定到临时数据还可以将引用绑定到类型相近的数据这使得引用更加灵活和通用它们背后的机制都是临时变量。 引用类型的函数形参请尽可能的使用 const 使用 const 可以避免无意中修改数据的编程错误 使用 const 能让函数接收 const 和非 const 类型的实参否则将只能接收非 const 类型的实参 使用 const 引用能够让函数正确生成并使用临时变量。