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