中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

布爾類型及引用(三)

發布時間:2020-08-02 17:17:20 來源:網絡 閱讀:1655 作者:上帝之子521 欄目:編程語言

        今天我們來學習下 C++ 中的布爾類型。說起布爾類型,有的同學可能在 C 語言中聽過,0 代表假,1 代表真。我們在 C 語言中用 int 類型的數來表示布爾類型,這也是可取的。但是在 C++ 中正式引出了布爾類型這個概念,它是一種基本類型。C++ 中的 bool 可取的值只有 true 和 false,理論上 bool 只占用一個字節。注意:true 代表真值,編譯器內部用 1 來表示;false 代表非真值編譯器內部用 0 來表示。

        bool 類型只有 true(非0)和 false(0)兩個值,C++ 編譯器會將非 0 值轉換為 true,0 值轉換為 false。下來我們來以代碼為例進行分析

#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;
}

        我們分析下,第 8 行打印 bool 類型 b 的內存大小,那么便是為 1 了。由于它初始化為 false ,所以為 0, a = b 當然也為 0 了;第 11 行 b 為非 0。所以第 14 行打印出 1, 1;第 16 行 b 為非 0。所以第 19 行打印出 1, 1;第 21 行 a 為 10,所以第 24 行打印出 10, 1;第 26 行 a 為 0,所以第 29 行打印出 0, 0啦。我們看看編譯結果

布爾類型及引用(三)

        因為布爾類型是 C++ 中的基本數據類型,所以我們可以定義 bool 類型的:局部變量、全局變量、常量、指針、數組 ... ; C++ 對三目運算符也進行了升級,在 C 語言中的三目運算符返回的是變量值,不能作為左值使用;但在 C++ 中,三目運算符可直接返回變量本身,所以它即可作為右值使用,又可作為左值使用。注意:三目運算符可能返回的值中如果有一個是常量值,則不能作為左值使用。

        下來我們以代碼為例進行分析

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;
    
    (a < b ? a : b) = 3;
    
    printf("a = %d, b = %d\n", a, b);   
    
    return 0;
}

        這段代碼在 gcc 中肯定編譯通不過因為三目運算符返回的是變量值,給常量賦值肯定出問題,那么在 g++ 中,它可以通過,返回的是變量本身,所以第 8 行相當于 a = 3。我們來看看編譯結果

布爾類型及引用(三)

        我們看到 gcc 編譯直接報錯,但是 g++ 編譯通過,并且成功的改變了 a 的值。在這塊我們就不得不提變量名了,我們之前學過變量是一段實際連續存儲空間的別名;程序中通過變量來申請并命名存儲空間;通過變量的名字可以使用存儲空間。我們再來想一個問題:一段連續的存儲空間只能有一個別名嗎?在 C++ 中新增了引用的概念。那么什么是引用呢?引用可以看作一個已定義變量的別名,它的語法格式是:TYpe& name = var;注意:普通引用在定義時必須同同類型的變量進行初始化。我們以代碼為例進行分析

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 3;
    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;
}

        我們看到在第 6 行進行了 a 的引用,也就是說, b 為 a 的別名,改變 b 的值就相當于改變 a 的值啦。我們看看編譯結果

布爾類型及引用(三)

        我們看到 a 和 b 都改為了 5,并且他倆的地址是一樣的,也就證明了 b 是 a 的別名。那么回到之前的三目運算符的問題,當三目運算符的可能返回值都是變量時,返回的是變量引用;當三目運算符的可能返回值中有常量時,返回的是值。如下所示

布爾類型及引用(三)

        通過對布爾類型和引用的學習,總結如下:1、bool 類型是 C++ 新增加的基礎類型,它的值只能是 true 和 false;2、C++ 中的三目運算符可作為左值使用;3、C++ 中的引用可以看作變量的別名來使用;4、三目運算符的可能返回都是變量時,返回的是引用。


        歡迎大家一起來學習 C++ 語言,可以加我QQ:243343083

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐平市| 伊金霍洛旗| 绍兴县| 库尔勒市| 莱州市| 玛曲县| 温泉县| 永仁县| 峨眉山市| 改则县| 比如县| 莲花县| 廊坊市| 奉节县| 锡林郭勒盟| 旅游| 黎平县| 安福县| 密云县| 淮北市| 翁源县| 乐清市| 南漳县| 东兴市| 甘泉县| 镇原县| 张家口市| 全椒县| 长乐市| 鄢陵县| 远安县| 洞口县| 界首市| 敖汉旗| 阿拉尔市| 绥中县| 斗六市| 巴中市| 方城县| 漳州市| 桃园市|