欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++簡明分析講解布爾類型及引用

 更新時間:2022年04月21日 16:07:07   作者:清風(fēng)自在 流水潺潺  
布爾型(Boolean),是一種類型變量類型,引用(reference)就是C++對C語言的重要擴充。引用就是某一變量(目標(biāo))的一個別名,對引用的操作與對變量直接操作完全一樣

一、C++中的布爾類型

  • C++在C語言的基本類型系統(tǒng)之上增加了bool
  • C++中的bool可取的值只有true和 false
  • 理論上bool只占用一個字節(jié)
  • C++編譯器會將非0值轉(zhuǎn)換為true ,0值轉(zhuǎn)換為false

注意:

true代表真值,編譯器內(nèi)部用1來表示

false代表非真值,編譯器內(nèi)部用0來表示

下面看一下這段代碼,加深一下對bool類型的理解。

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

下面為輸出結(jié)果,可以看到0值輸出為0,而非0值輸出為1,和上面介紹的一樣。

接下來再上一段代碼,再次加深對布爾類型的理解。

#include <stdio.h>
int main(int argc, char *argv[])
{
    bool b = false;
    int a = b;
    printf("sizeof(b) = %d\n", sizeof(b));
    printf("b = %d, a = %d\n", b, a);
    b = 3;
    a = b;
    printf("b = %d, a = %d\n", b, a);
    b = -5;
    a = b;
    printf("b = %d, a = %d\n", b, a);
    a = 10;
    b = a;
    printf("a = %d, b = %d\n", a, b);
    a = 0;
    b = a;
    printf("a = %d, b = %d\n", a, b);
    return 0;
}

下面為輸出結(jié)果,可以看到bool類型只占用一個字節(jié),且輸出符合上面講的理論。

布爾類型是C++中的基本數(shù)據(jù)類型

  • 可以定義bool類型的全局變量
  • 可以定義bool類型的常量
  • 可以定義bool類型的指針
  • 可以定義bool類型的數(shù)組
  • ......

二、C++中的三目運算符

C++對三目運算符進行了升級

C語言中的三目運算符返回的是變量值

  • 不能作為左值使用

C++中的三目運算符可直接返回變量本身

  • 既可作為右值使用,又可作為左值使用

注意:三目運算符可能返回的值中如果有一個是常量值,則不能作為左值使用。

通過下面這個程序來說明一下C++對于三目運算符的升級。

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

下面為輸出結(jié)果,可以看到上面的程序在C語言的編譯條件下編譯不通過,而在C++的編譯條件下編譯通過,這說明在(a < b ? a : b)代碼中,因為a < b ,所以輸出a的值,然后把3賦值給a。

C++對三目運算符做了什么?

  • 當(dāng)三目運算符的可能返回都是變量時,返回的是變量引用
  • 當(dāng)三目運算符的可能返回中有常量時,返回的是值

從C++編譯器輸出結(jié)果也可知,第一種寫法編譯可以通過,第二種寫法編譯不通過,如下圖所示。

三、C++中的引用

變量名回顧

  • 變量是一段實際連續(xù)存儲空間的別名
  • 程序中通過變量來申請并命名存儲空間
  • 通過變量的名字可以使用存儲空間

變量命名及對應(yīng)地址

在C++中新增加了引用的概念

  • 引用可以看作一個已定義變量的別名
  • 引用的語法: Type& name = var;

注意:普通引用在定義時必須用同類型的變量進行初始化。

以下面的程序為例,說明一下引用。

#include <stdio.h>
int main(int argc, char *argv[])
{
	int a = 4;
	int& b = a;    //b為a的別名
	printf("a = %d, b = %d\n", a, b);    //操作b就是操作a
    return 0;
}

下面為輸出結(jié)果,可以看到a和b均為4,這就很好的說明了引用的概念。

為了進一步理解引用,下面對上述程序進行了修改。

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

下面為輸出結(jié)果,因為我們通過a變量的別名b對a變量進行了修改,操作b就相當(dāng)于操作a,C++中可以對同一段連續(xù)的內(nèi)存起任意多的別名,所以標(biāo)識符a和b代表內(nèi)存里面同一段連續(xù)的空間。

如果我們把 int& b = a; 改成float& b = a; 或者改成 float& b; 或者改成float& b = 1,則編譯器分別報如下錯誤,這說明C++編譯器對數(shù)據(jù)類型要求是非常嚴(yán)格的。

四、總結(jié)

  • bool類型是C++新增加的基礎(chǔ)類型
  • bool類型的值只能是true和false
  • C++中的三目運算符可作為左值使用
  • C++中的引用可以看作變量的別名來使用
  • 三目運算符的可能返回都是變量時,返回的是引用

到此這篇關(guān)于C++簡明分析講解布爾類型及引用的文章就介紹到這了,更多相關(guān)C++布爾類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c語言static關(guān)鍵字用法詳解

    c語言static關(guān)鍵字用法詳解

    大家好,本篇文章主要講的是c語言static關(guān)鍵字用法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言?超詳細(xì)梳理總結(jié)動態(tài)內(nèi)存管理

    C語言?超詳細(xì)梳理總結(jié)動態(tài)內(nèi)存管理

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-03-03
  • 詳解C語言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù)

    詳解C語言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù)

    這篇文章主要介紹了詳解C語言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    Visual?Studio?2022?引入了用于?Linux?C++?開發(fā)的本機?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下
    2021-11-11
  • c++ builder TreeView控件節(jié)點遍歷代碼

    c++ builder TreeView控件節(jié)點遍歷代碼

    這篇文章介紹了c++ builder TreeView控件節(jié)點遍歷代碼,有需要的朋友可以參考一下
    2013-09-09
  • C++ 迭代器失效問題解決

    C++ 迭代器失效問題解決

    在C++中,當(dāng)一個vector進行了插入或刪除操作時,其迭代器可能會失效,本文就來介紹一下C++ 迭代器失效問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • JsonCpp中double的問題解決

    JsonCpp中double的問題解決

    本文主要介紹了JsonCpp中double的問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 詳解C語言內(nèi)核中的自旋鎖結(jié)構(gòu)

    詳解C語言內(nèi)核中的自旋鎖結(jié)構(gòu)

    自旋鎖是內(nèi)核中提供的一種高IRQL鎖,用同步以及獨占的方式訪問某個資源。自旋鎖是為了解決內(nèi)核鏈表讀寫時存在線程同步問題。本文將講解一下自旋鎖的簡單應(yīng)用,感興趣的可以了解一下
    2022-09-09
  • C/C++中extern

    C/C++中extern "C" 的作用分析

    這篇文章主要介紹了C/C++中extern "C" 的作用,是在進行C/C++程序設(shè)計中非常常見的用法,需要的朋友可以參考下
    2014-09-09
  • C++無符號整數(shù)溢出問題解析

    C++無符號整數(shù)溢出問題解析

    這篇文章主要介紹了C++無符號整數(shù)溢出探究,本文主要探討C/C++中無符號整數(shù)超過范圍后的計算問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論