1. 程式人生 > >C++深度解析 布林型別bool 和 引用 &(3)

C++深度解析 布林型別bool 和 引用 &(3)

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++中的引用可以看作變數的別名來使用

三目運算子的可能返回都是變數時,返回的是引用