3 布林型別和引用
阿新 • • 發佈:2020-09-19
目錄
1 布林型別
-
C++ 中的布林型別
- C++ 在 C 語言的基本型別系統之上增加了
bool
- C++ 中的
bool
可取的值只有true
和false
bool
只佔用一個位元組
- C++ 在 C 語言的基本型別系統之上增加了
-
注意:
true
代表真值,編譯器內部用 1 來表示false
代表非真值,編譯器內部用 0 來表示
-
布林型別的值
bool
型別只有true
(非 0)和false
(0)兩個值- C++ 編譯器會將非 0 值轉換為
true
,0 值轉換為false
-
布林型別的使用示例
-
Demo
#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; //b = true; a = b; //a = 1 printf("b = %d, a = %d\n", b, a); //1,1 b = -5; //b = true a = b; //a = 1 printf("b = %d, a = %d\n", b, a); //1,1 a = 10; b = a; //b = false printf("a = %d, b = %d\n", a, b); //10,1 a = 0; b = a; //b = false printf("a = %d, b = %d\n", a, b); //0,0 return 0; }
-
-
布林型別是 C++ 中的基本資料型別
- 可以定義
bool
型別的全域性變數 - 可以定義
bool
型別的常量 - 可以定義
bool
型別的指標 - 可以定義
bool
型別的陣列 - 。。。
- 可以定義
2 三目運算子
-
C++ 對三目運算子進行了升級
-
問題:下面的程式碼正確麼?
int a = 1; int b = 2; (a < b ? a : b) = 3; printf("a = %d,b = %d\n",a,b);
- C 語言編譯器編譯:錯誤:error: lvalue required as left operand of assignment
- C++ 編譯器編譯:正確:a = 3,b = 2
-
C 語言中的三目運算子返回的是變數值,不能作為左值使用
-
C++ 中的三目運算子可以直接返回變數本身,既可以作為右值使用,又可以作為左值使用
-
注意:如果三目運算子可能返回的值如果有一個是常量值,則不能作為左值使用
3 引用
-
變數名
- 變數是一段實際連續儲存空間的別名
- 程式中通過變數來申請並命名儲存空間
- 通過變數的名字可以使用儲存空間
-
問題:一段連續的儲存空間只能有一個別名麼?
- 可以有多個 => 引用
-
C++ 中的引用
-
引用可以看作一個已定義變數的別名
-
引用的語法:
Type& name = var;
int a = 4; int& b = a; //b為a的別名 b = 5; //操作b就是操作a
-
注意:普通引用在定義時必須用同類型的變數進行初始化
-
-
引用示例
-
Demo
#include <stdio.h> int main(int argc, char *argv[]) { int a = 4; int& b = a; b = 5; printf("a = %d\n", a); //5 printf("b = %d\n", b); //5 printf("&a = %p\n", &a); //&a = 0xbfe54aec printf("&b = %p\n", &b); //&b = 0xbfe54aec return 0; }
-
-
C++ 對三目運算子做了什麼?
- 當三目運算子的可能返回都是變數時,返回的是變數引用
- 當三目運算子的可能返回中有常量時,返回的是值
int a = 1; int b = 2; (a < b ? a : b) = 3; //正確,返回a或b的引用,可作為左值 (a < b ? 1 : b) = 4; //錯誤,返回1或b的值,不能作為左值