C 基礎學習教程 第二章 變數(2)

2021-08-02 16:35:03 字數 1580 閱讀 8980

第二節 復合型別

在第一節中我們介紹了變數的定義,宣告,初始化等變數基本基礎知識。本節我們將講解比較複雜的復合型別。

復合型別是指基於其他型別定義的型別,即在基礎資料型別的基礎上,又指明了該變數與基本資料型別有關的某種型別。本節將介紹其中兩種:引用和指標。

1 引用型別

1.1 定義與初始化

引用是為變數起了另乙個名字,引用型別引用另外一種型別。通過將宣告符寫成&d的形式來定義引用型別,其中d是宣告的變數名:

int i = 0;

int &ref_i= i;

在定義引用型別變數時,程式並不會給引用變數分配儲存資料的空間來拷貝初始值,而是將引用和它的初始值繫結在一起,一旦初始化完成,引用將和它的初始值物件一直繫結在一起。因為無法令引用重新繫結到另乙個物件,因此引用必須初始化。

1.2 說明

引用的型別都要與之繫結的物件嚴格匹配,而且,引用只能繫結在物件上,而不能與字面值或某個表示式的計算結果繫結在一起,除了兩種例外情況:

第一種特例就是在初始化常量引用時允許用任意表示式作為初始值,只要該表示式的結果能轉換成引用的型別即可。

int i = 0;

const

int constref_i = i; //正確

const

int constref_i = 0; //正確

const

int constref_i = i * 2; //正確

int ref_i = 0; //錯誤

第二種由於超出基本概念太多,暫時不說明。

2.指標

2.1 定義

指標是指向另外一種型別的復合型別。

定義指標型別的方法將宣告符*d的形式,其中d是變數名。由於指標存放某個變數的位址,當我們需要初始化指標時,我們需要獲得變數的位址(取位址符&):

int i = 0;                  

int *point_i; //未初始化的指標

int *point_i = &i; //指向i的指標

指標和引用一樣,指標指向的變數的型別與指標的型別必須匹配。

2.2 初始化空指標

int

*p1 = nullptr; //c++新標準

int*p1 = null;

int*p1 = 0;

2.3 利用指標訪問物件

儘管引用和指標都可以間接訪問物件,但訪問方式不同,對引用的所有操作都是與之繫結的物件上進行的,無需任何符號。指標則需要使用解引用符(*)來訪問該物件。

對指標解引用會得出所指的物件,因此如果給解引用的結果賦值,實際上也就是給指標所指的物件賦值。

2.4 指標與引用的區別

(1)指標本身就是乙個物件,允許對指標賦值和拷貝,而且在指標的生命週期內它可以先後指向幾個不同的物件。

(2)指標無須在定義時賦初值。和其他內建型別一樣,在塊作用域內定義的指標如果沒有被初始化,也將擁有乙個不確定的值。

c 第二章 變數

c 基本算術型別 char 8位 wchar t 16位 short 16位 int 16位 long 32位 float 6位有效數字 double 10位有效數字 long double 10位有效數字 1.8位的塊為乙個位元組,32位為乙個字 2.unsigned無符號型別,表示大於等於0的數...

第二章 C 基礎( )

不必在結構名 聯合名 列舉名前加上字首 此外在結構和聯合中還可定義函式 左值指記憶體區域,用變數名進行操作 記憶體區域中的內容則稱為它的右值 指標變數 p所需要的記憶體大小都相同 取決於系統字長 與資料型別無關 p 儲存的位址,實質是某個記憶體區域的首位址 1 空指標null 0nullptr c ...

C 第二章學習

在c 中用同一名字定義多個函式,多個同名函式的個數和型別可以完全不同。int abs int n double abs double n 當同樣名字的函式出現在同一作用域內,就是函式過載。一般過載函式執行相同的功能。必須有兩種差別之一 1 乙個或多個引數的型別不同。2 函式的引數個數不同。如果內部變...