C++程序中的引用_3
一。C++中的布尔类型
1.C++在C语言的基本类型之上增加了bool
2.C++中的bool可取的值只有true 和false
3.理论上bool只占有一个字节
如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现。
Tip:
true代表真值,编译器内部用1表示(兼容C语言)。
false代表非真值,编译器内部用0来表示。
#include <stdio.h> int main(int argc, char *argv[]) { int a; bool b = true; printf("b = %d, sizeof(b) = %d\n", b, sizeof(b)); b = 3; a = b; printf("a = %d, b = %d\n", a, b); b = -5; a = b; printf("a = %d, b = %d\n", a, b); a = 10; b = a; printf("a = %d, b = %d\n", a, b); b = 0; printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; }
输出结果
所有的C++编译器在赋值时候将非0值转化成True,0值转化成false。
二. 三目运算符的升级
1. C语言中的三目运算符返回的是变量值,不能作为左值出现。
2. C++中的三目运算符可以直接返回变量本身,因此可以出现在程序的任何地方
3.变量名回顾
#变量是一段实际连续储存空间的别名。
#程序中通过变量来申请并命名存储空间
#通过变量的名字可以使用存储空间
三。C++的引用
在C++中新增了引用的概念
1.引用可以看做一个已定义变量的别名。
2.引用的语法:Type& name = var;
int main()
{
int a = 4;
int& b = a;
b = 5;
printf("%d\n",a);
printf("%d\n",b);
printf("%08X\n",&a);
printf("%08x\n",&b);
return 0;
}
输出:a = 5; b = 5
注:引用作为普通参数的声明时需要初始化。
四。引用的意义
1.引用作为其他变量的别名而存在的,因此在一些场合可以代替指针
2.引用相对于指针来说具有更好的可读性和实用性。
注:引用作为函数参数的声明时不初始化。
五、const 引用
1. 在C++中可以声明const引用。
2. const引用表示 const int& b = a;
3. const 引用让变量编程只读变量。
#include <stdio.h> int main(int argc, char *argv[]) { int a = 4; const int& b = a; int* p = (int*)&b; //b = 5; *p = 5; printf("a = %d\n", a); printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; }
4.当使用常量对const引用进行初始化(可以为常数)时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名。
#include <stdio.h> int main(int argc, char *argv[]) { const int& b = 1; int* p = (int*)&b; *p = 5; printf("b = %d\n", b); return 0; }
注意:使用常量对const引用初始化后将生成一个只读变量。
5.引用有自己的存储空间吗?
引用在C++中的内部实现是一个常指针
Type& name <->Type *const name
importance:
# C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。
#从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间,这是C++为了实用性而做出的细节隐藏。
<=>
六。函数的返回值为引用时
1.当返回栈变量(局部变量)
# 不能成为其他引用的初始值
#include <stdio.h> int& f() { static int a = 0; return a; } int& g() { int a = 0; return a; } int main() { int a = g(); int &b = g(); f() = 10; printf("a = %d\n", a); printf("b = %d\n", b); printf("f() = %d\n", f()); printf("Press enter to continue ..."); getchar(); return 0; }
输出结果:a = 0;b = 随机值 ,f() = 10;
#不能作为左值使用
2.当返回静态变量或者全局变量
#可以成为其他引用的初始值
#既可以为右值,又可以作为左值。
#include <stdio.h> int& f() { static int a = 0; return a; } int& g() { int a = 0; return a; } int main() { int a = g(); int &b = g(); f() = 10; printf("a = %d\n", a); printf("b = %d\n", b); printf("f() = %d\n", f()); printf("Press enter to continue ..."); getchar(); return 0; }
输出结果:a = 0; b = 随机值;f() = 10;
七。小结:
1. bool类型是C++新增加的基础类型。
2. C++中的引用可以看作变量的别名来使用。
3.C++中的常引用可以使得一个变量拥有只读属性
4.C++中的常引用可以用常量初始化而得到一个只读变量
5.C++中引用的本质是一个指针常量。