C++深度解析 布林型別bool 和 引用 &(3)
阿新 • • 發佈:2018-12-15
C++深度解析 布林型別和引用(3)
1 布林型別 bool
在C++中,bool型別只有true(非0)和false(0)兩個值,且bool型別只佔用了一個位元組
true:非0
false:0
示例一:
#include <stdio.h> int main(int argc, char *argv[]) { bool b = 0; printf("b = %d\n", b); b++; printf("b = %d\n", b); b = b - 3; printf("b = %d\n", b); return 0; }
結果如下:
在C++中,遇到布林型別bool時,將bool型別當成一個只佔用1個位元組的整形數。
示例二:
#include <stdio.h> int main(int argc, char *argv[]) { bool b = false;; int a = b; printf("sizeof(b) = %d\n", sizeof(b)); //1 printf("b = %d, a = %d\n", b, a); //0, 0 b = 3; a = b; printf("b = %d, a = %d\n", b, a); //1, 1 b = -5; a = b; printf("b = %d, a = %d\n", b, a); //1, 1 a = 10; b = a; printf("a = %d, b = %d\n", a, b); //10, 1 a = 0; b = a; printf("a = %d, b = %d\n", a, b); //0, 0 return 0; }
結果如下:
2 三目運算子
三目運算子即可作為右值使用,又可作為左值使用。
示例一:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3; // a = 3;
printf("a = %d, b = %d\n", a, b);
return 0;
}
結果如下:
示例二:
#include <stdio.h> int main(int argc, char *argv[]) { int a = 1; int b = 2; (a < b ? a : 2) = 3; printf("a = %d, b = %d\n", a, b); return 0; }
結果如下:
三目運算子可能返回的值中如果有一個是常量值,則不能作為左值使用。
意義:如果三目運算子的返回都是變數的時候,返回的是變數的本身。
3 引用
變數名的本質是儲存空間的別名。
引用:已定義變數的別名
引用的語法:Type& name = var;
引用在定義時,必須初始化,且型別必須一致,初始化的值必須是變數,而非常量
int a = 4;
int& b = a; //b為a的別名
b = 5; //操作b就是操作a
注意:普通引用在定義時必須用同類型的變數進行初始化。
示例一:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 4;
int& b = a;
b = 5;
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("&a = %p\n", &a);
printf("&b = %p\n", &b);
return 0;
}
結果如下:
在C++,完全可以對同一段連續的記憶體,起任意多的別名。
示例二:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 4;
float& b = a;
b = 5;
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("&a = %p\n", &a);
printf("&b = %p\n", &b);
return 0;
}
結果如下:
引用b的型別 必須和 變數a要一樣。
小結:
bool型別是C++新增加的基礎型別
bool型別的值只能是true(非0)和false(0)
C++中的三目運算子可作為左值使用
C++中的引用可以看作變數的別名來使用
三目運算子的可能返回都是變數時,返回的是引用