引用和指针的差别,数组和指针的差别
一:引用和指針的差別
1:引用并不是對象,它僅僅是為一個已存在的對象所起的另外一個名字。必須初始化,并且無法改變它綁定的對象,之后每次使用這個引用都是訪問最初綁定的那個對象。
2:指針本身是對象,能夠不用初始化,能夠改變指針指向的對象
二:指針與數組的差別
|
指針 |
數組 |
|
保存數據的地址 |
保存數據 |
|
間接訪問數據 |
直接訪問 |
|
通經常使用于動態數據結構 |
通經常使用于存儲固定數目數據類型同樣的元素 |
|
相關操作malloc(),free()等 |
隱式分配和刪除 |
|
同常指向匿名數據 |
自身即為數據名 |
在C語言中對于以下的兩種情況,是否同樣呢?
char a[] = "abcdefg";---------------1
char *p = "abcdefg";-----------------2
在談到這些差別時。應該先談一下計算機中對變量是怎樣存儲的。從編譯原理中我們知道,對于全部的變量他都會影射到一個符號表中。為了簡化。這里給出一種最簡單的便于理解的符號表:
|
a |
0xffaa |
|
p |
0xffcc |
表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中,初始化指針是所創建的字符串時常量,被定義為僅僅讀,假設試圖通過指針改動這個字符串的值,程序就會出現為定義的行為。
更具體的能夠參考:http://wenku.baidu.com/view/678d1925a5e9856a561260b1.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的引用和指针的差别,数组和指针的差别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象程序设计第二次作业(2)
- 下一篇: 16位/32位中断机制比較