引用和指標的差別,陣列和指標的差別

2021-09-22 12:05:31 字數 1213 閱讀 9885

一:引用和指標的差別

1:引用並不是物件,它僅僅是為乙個已存在的物件所起的另外乙個名字。必須初始化,並且無法改變它繫結的物件,之後每次使用這個引用都是訪問最初繫結的那個物件。

2:指標本身是物件,能夠不用初始化,能夠改變指標指向的物件

二:指標與陣列的差別

指標陣列

儲存資料的位址

儲存資料

間接訪問資料

直接訪問

通經常使用於動態資料結構

通經常使用於儲存固定數目資料型別同樣的元素

相關操作malloc(),free()等

隱式分配和刪除

同常指向匿名資料

自身即為資料名

在c語言中對於以下的兩種情況,是否同樣呢?

char a = "abcdefg";---------------1

char *p = "abcdefg";-----------------2

在談到這些差別時。應該先談一下計算機中對變數是怎樣儲存的。從編譯原理中我們知道,對於全部的變數他都會影射到乙個符號表中。為了簡化。這裡給出一種最簡單的便於理解的符號表:

a0xffaa

p0xffcc

表1 乙個簡單的符號表演示樣例

以上**中a代表乙個變數。0xffaa則為變數a的內容的儲存位址。p代表還有乙個變數。0xffcc為變數p的內容的儲存位址。對於陣列型的變數和指標型的變數,其位址代表的含義不同。

對於陣列a:

這個0xffaa位址就是其存放陣列內容的首位址了。

對於a[i]的引用過程例如以下:

步驟一、取出i的值,將他與0xffaa相加;

步驟二、取出為(0xffaa+i)中的內容。

對於指標p:

這個0xffcc位址存放的不是字串的內容,而是乙個位址,這個位址才是字串的首位址,對p[i]或者用指標表示*(p+i)的應用過程例如以下:

步驟一、取出0xffcc位址中的內容。比如為0xffdf;

步驟二、取出位址0xffdf中的內容。

還要提醒一點的就是:

char a = "abcdefg";---------------陣列內容能改動(字元陣列)

char *p = "abcdefg";-----------------內容不能改動(字串常量)

在ansi c中,初始化指標是所建立的字串時常量,被定義為僅僅讀,假設試圖通過指標改動這個字串的值,程式就會出現為定義的行為。

更具體的能夠參考:

指標和引用的差別

指標和引用的區別 主要有以下四個方面 1 非空區別 在任何情況下,都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用一 個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時就應該把變數宣告為指標,因為這樣才可以賦空值給該變數。相反,如果變數肯定指向乙個物件,即...

指標和引用的差別

1.非空 在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某個物件。所以如果你使用乙個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時應該把變數宣告為指標,因為這樣就可以賦空值給該變數。相反,如果變數肯定指向乙個物件,比如你的設計不允許變數為空,這時就可以把變數宣告為...

指標和引用的差別

1 非空區別。在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時你應該把變數宣告為指標,因為這樣你可以賦空值給該變數。相反,如果變數肯定指向乙個物件,例如你的設計不允許變數為空,這是你就可以把變...