C++ Primer Plus 自學筆記2:函數及數據類型簡介

函數簡介

函數原型及函數頭

#include <iostream>
using namespace std;

double square(double i);

int main(){
    cout<<square(3)<<endl;
}

double square(double i){
    return i*i;
}

main函數前面這行,就是square的函數原型。所謂的函數原型,就相當於變量聲明之於變量,是對函數的一種聲明。如果函數原型的這條語句沒有末尾的分號,編譯器就會把這一行識別爲函數頭(相當於上述代碼中的第10行),並要求接下來提供實現該函數的函數體(11~12行)。

一般用戶的自定義函數按以上寫法來寫,先在main函數前進行聲明,再在main函數後對函數進行定義(多說一句,函數的定義不能嵌套在任意函數之中,每個函數的定義都是獨立、平等的)。當然也可以省略函數的聲明,直接在main函數前對函數進行完整定義,但格式上感覺不太美觀……

函數原型可在代碼中直接進行聲明,也可以在代碼include的頭文件中進行聲明。一般頭文件中僅提供函數原型,函數的真正實現可能在其他文件中(例如頭文件對應的庫文件)。

 

變量命名

變量名由下劃線、字母、數字組合而成,其中不可用數字作爲開頭。單個下劃線可作變量名。

下劃線打頭的變量是合法的,但不建議用戶自定義變量採取這種命名方式。因爲“_”、“__”開頭的多爲系統庫函數和宏的名稱。如果用戶非要這麼用,也是可以的,但不能保證運行的穩定性。

 

整型

分類

C++中的整型有char、short、int、long、long long五種類型,每種類型都有有符號版本和無符號版本,因此總共有10種整型。

實際上,short、long、long long int全名分別爲short int、long int、long long int,但一般都簡寫……

無符號類型通過在數據類型名前加上“unsigned”聲明,如:

unsigned int a = 0;

範圍

#include <climits>

通過以上頭文件可使用幾個系統自帶的常量,這些常量也清晰地界定了各數據類型的數據範圍(Win10 64位環境下):

//char類型佔8位,無符號型爲0~255
CHAR_MIN = -128
CHAR_MAX = 127

//short類型佔16位,無符號型爲0~65535
SHRT_MIN = -32768
SHRT_MAX = 32767

//int類型佔32位,無符號型爲0~2^32-1
INT_MIN = -2147483648
INT_MAX = 2147483647

//long類型佔32位,無符號型爲0~2^32-1
LONG_MIN = -2147483648
LONG_MAX = 2147483647

//long long類型佔64位,無符號型爲0~2^64-1
LONG_LONG_MIN = -9223372036854775808
LONG_LONG_MAX = 9223372036854775807

比較有意思的是,如果超過了數據範圍上限,則變量值會爲最小值,同理,低於下限會變成最大值,即INT_MAX + 1 = INT_MIN,INT_MIN -1 = INT_MAX,無符號型同樣有該特性。

按ISO/IEC 14882:2011(即C++ 11標準),無符號類型的char、short、int、long、long long的數據範圍都不得低於排在它前面的哪一種數據類型,且標準提到了,具體數據範圍可根據環境制定。其中,int型應該爲“自然長度”,也就是計算機處理起來效率最高的長度,例如在32位系統中,int就佔32位,但在16位系統中,int一般只能佔16位。當然也有例外,windows64位環境下,int仍然只佔32位。

因此同樣的數據類型,在不同系統內其數據範圍可能不同,需要注意。

整型字面值

除了十進制,C++支持用八進制和十六進制表示整數。

八進制:第一位爲0,第二位爲0到7的數字,則從第二位開始到結束的一整串數字表示一個八進制整數,如012,表示的數字十進制下爲11。

十六進制:第一位爲0,第二位爲“x”或“X”,則從第三位開始到結束的一整串數字表示一個十六進制整數(A~F大小寫均可)。如0xF,表示十進制數15。

無論用何種表示方法,在cout的時候統一轉換成十進制表示。當然也可用格式控制符指定顯示以何種進制顯示:

int a = 0xf;
cout<<hex<<a<<endl;    //16
cout<<dec<<a<<endl;    //10
cout<<oct<<a<<endl;    //8

初始化

函數內的變量創建而不初始化,其值一般爲變量創建前對應內存空間中的值。

一些不常見的初始化方式:

int a = {5}

將a初始化爲5,其中,“=”可以省略,如果初始化爲0,大括號內可以什麼都不填。

該初始化方法適用於幾乎全部C++自帶數據類型:

string s{"123"};
string emptyString{};

 

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