C++常量與變量

日期:2020年3月27日
作者:Commas
註釋:開始我的C++學習的奇妙之旅,願意和我一起學習的小夥伴們可以關注我,也可以給我點贊,如若博客有哪裏寫的不好的地方,還望各位看官指出,非常感謝……
更多C++內容,請看我的《C++學習的奇妙之旅》



一、前言

程序中的數據包括常量與變量

  • 常量:在程序執行期間不會改變的固定值,又稱爲字面量
  • 變量:在程序執行期間可以改變的數據,本質是程序可操作的存儲區的名稱
類型 讀寫說明
常量 僅只讀,在定義並初始化後,不可修改原值
變量 可讀寫,在程序運行中,可以修改變量值

二、基本數據類型

在C++中,數據類型決定了變量存儲的大小和佈局,基本數據類型可分爲以下4類:

  • 整數類型(int):基本整型;
  • 實數類型(float\double):浮點數類型;
  • 布爾類型(bool):存儲true\false;
  • 字符類型(char):實際上存儲的是整數,可以容納單字符的編碼(ASCII碼);

不知道有沒有注意到,和其他高級程序語言有點不太一樣,C++在基本數據類型中,是沒有字符串變量的,可以採用字符串數組存儲字符串的,這很C字符串風格,但是已經不鼓勵使用了,不過還是要了解一下。在標準C++類庫中有一個String類,這個是值得推薦的,很C++字符串風格。
另外,值得指出的是,數據的基本類型所佔字節數在不同的編譯環境可能會有不同,可以用sizeof(type)查看,如以下我們查看一下int類型所佔字節長度:

#include <iostream> 
using namespace std; 

// main() 是主程序,程序開始執行的地方
int main()
{
    //int類型所佔字節長度
    cout<<sizeof(int)<<endl;
        
    return 0;
}

控制檯輸出:4

三、常量

(一)常量的類型

(1)整數常量

其實,一個整數常量的表示 = 前導 + 數據本身 + 後綴 表示;

前導決定數據的進制,如下:

  • 十進制:無前導 + 數據本身
  • 八進制: 前導0 + 數據本身(0~7
  • 十六進制:前導0x + 數據本身(0~9A~F
//(1)十進制
2020
//(2)八進制
012 
018 //是不合法的,八進制不可能會出現8
//(3)十六進制
0xFF 

後綴決定數據類型,整數常量默認的是有符號(signed)的整數(long),可修改爲:

  • 無符號整數(unsigned):U 或 u,大小寫隨意;
  • 長整數(long):L 或 l,大小寫隨意;
2020  //整數
2020l //長整數
2020u //無符號整數
2020ul //無符號的長整數,符號順序隨意
2020lu //無符號的長整數,符號順序隨意

(2)浮點常量

其實,一個浮點常量的表示 = 整數部分 + . + 小數部分 + 後綴 + 指數部分 表示;

後綴決定數據類型,整數常量默認的是(double)浮點類型,可修改爲:

  • float類型:F 或 f,大小寫隨意;

另外,指數部分引入E 或 e來表示,如3.14159可以表示爲314159E-5L

(3)布爾常量

  • true:代表真,不應該將其看作爲1;
  • false:代表假,不應該將其看作爲0;

(4)字符與字符串常量

類型 表示 存儲形式 示例
轉義字符 如\n,\t等 該字符的ASCII碼 \n,存放的是換行符\n的ASCII碼
字符 西文單引號‘’ 該字符的ASCII碼 ‘a’,存放的是a的ASCII碼
字符串 西文雙引號“” C風格的字符串:字符的ASCII碼依次存放,在最後的默認用\0作爲結束標記 “a”,存放的是a、\0的ASCII碼

字符串常量前面還可以加前導(前綴),可以改變類型,如下:

前導(前綴) 含義 類型
u Unicode 16字符串 char16_t
U Unicode 32字符串 char32_t
L 寬字符 wchar_t
u8 UTF-8(僅用於字符串字面量常量) char
u"hello"
U"hello"
L"hello"
u8"hello"

(二)常量的定義

定義變量總共有兩種方式:

  • 使用#define預處理器,語法如下:
#define identifier value
//identifier:標識符
//value:常量的值

//示例:
#define LENGTH 2020;
#define NAME 'C';
  • 使用const關鍵字,語法如下:
const type identifier = value;
//type:定義常量的類型
//identifier:標識符
//value:常量的值

//示例:
const int LENGTH = 2020;
const char NAME = 'C';
//以下爲拋出異常的示例:
//因爲char是單字節字符類型,不可以存字符串
const char NAME = "C";//invalid conversion from 'const char*' to 'char' [-fpermissive]
const char NAME = 'Commas';//character constant too long for its type

四、變量

(一)變量的定義

在使用變量前,我們要規定變量的類型,這樣編譯器才知道要給這些變量多少個字節的空間,我們先來看看,如何定義一個變量吧,語法如下:

type variable_list;

示例如下:

//(1)定義多個同類型的變量
int i,j,k;
//(2)定義單個變量
double d;

(二)變量的定義並且初始化

分配了這些字節空間後,變量的初始值是什麼,得分以下情況討論:

  • 全局變量:所有函數體之外的變量,如果不給初始值,它也會自動有一個基礎的初始值,比如說數值型的基礎初始值爲0;
  • 局部變量:在函數體內部的變量,如果不給初始值,那麼值是不確定的,可能會是垃圾數據,所以定義後對變量初始化,是一個非常好的習慣。
//NO1:
type variable_name = value;
//NO2:
type variable_name(value);
//NO3:
type variable_name = {value};
//NO4:
type variable_name{0}

示例如下:

#include <iostream> 
using namespace std; 

// main() 是主程序,程序開始執行的地方
int main()
{   

    int intA = 1;
    int intB(2);
    int intC = {3};
    int intD{4};

    cout<<"intA="<<intA<<endl;
    cout<<"intB="<<intB<<endl;
    cout<<"intC="<<intC<<endl;
    cout<<"intD="<<intD<<endl;
        
    return 0;
}

控制檯輸出:
intA=1
intB=2
intC=3
intD=4

另外,NO3和NO4使用了大括號,此初始化方式被稱爲列表初始化,該方式不允許信息的丟失,如int類型變量無法存儲double類型的數據,但是NO1和NO2會將溢出信息丟失從而不會影響程序的後續運行,如下:

//(1)可以運行
int intA = 1.111;//丟失小數部分,輸出值爲:1
int intB(2.222);//丟失小數部分,輸出值爲:2
//(2)拋出異常
int intC = {3.33};//拋出異常:error: narrowing conversion of '3.3300000000000001e+0' from 'double' to 'int' inside { } [-Wnarrowing]
int intD{4.44};//拋出異常:error: narrowing conversion of '4.4400000000000004e+0' from 'double' to 'int' inside { } [-Wnarrowing]

版權聲明:本文爲博主原創文章,如需轉載,請給出:
原文鏈接:https://blog.csdn.net/qq_35844043/article/details/105138910

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章