深入淺出理解C語言指針的綜合應(yīng)用_第1頁
深入淺出理解C語言指針的綜合應(yīng)用_第2頁
深入淺出理解C語言指針的綜合應(yīng)用_第3頁
深入淺出理解C語言指針的綜合應(yīng)用_第4頁
深入淺出理解C語言指針的綜合應(yīng)用_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第深入淺出理解C語言指針的綜合應(yīng)用目錄指針是什么?指針變量使用指針變量的例子通過指針引用數(shù)組數(shù)組名vs數(shù)組名野指針野指針成因1.指針未初始化2.指針越界訪問如何避免野指針指針運算

指針是什么?

指針是c語言中的一個重要概念,也是C語言的一個重要的特色,正確而靈活地運用它,可以使程序簡潔,緊湊,高效,每一個學(xué)習(xí)和使用c語言的人,都應(yīng)當深入了解地學(xué)習(xí)和掌握指針,可以說,不掌握指針就是沒有掌握C的精華也可以說

指針是C語言的靈魂(doge)

由于通過地址能找到所需的變量單元,可以說,地址指向變量單元,打個比方,一個房間的門口掛了一個房間號2008,這個2008就是房間的地址,或者說,2008指向該房間.因此,將地址形象化地稱為指針。意思是通過它能找到以它為地址的內(nèi)存單元!

指針變量

使用指針變量的例子

例通過指針變量訪問整型變量

intmain(){

inta=100,b=10;//定義整型變量a,b并初始化

int*p1,*p2;//定義指向整型數(shù)據(jù)的指針變量p1,p2;

p1=//把變量a的地址賦給指針變量p1

p2=//把變量a的地址賦給指針變量p2

printf("a=%d,b=%d\n",a,b);//輸出變量a和b的值

printf("*p1=%d,*p2=%d\n",*p1,*p2);

}

運行結(jié)果:

在開頭處定義了兩個指針變量p1和p2。但此時他們并未指向任何一個變量,只是提供兩個指針變量,規(guī)定他們可以指向整型變量,至于指向哪一個整型變量,要在程序中指定.。程序第五第六行的作用就是使p1指向a,使p2指向b,此時p1的值為a(即a的地址),p2的值為b(即為b的地址)

*注意:定義指針變量時,左側(cè)應(yīng)有類型名,否則就不是定義指針變量.

例如:

通過指針引用數(shù)組

所謂數(shù)組元素的指針就是數(shù)組元素的地址

可以用一個指針變量指向一個數(shù)組元素。例如

intarr[10]={1,3,5,7,9,11,13,15,17,19};//定義a為包含10個整型的數(shù)組

int*p;//定義p為指向整型變量的指針變量

p=a[0];//把a[0]元素的地址賦給指針變量p

數(shù)組名vs數(shù)組名

intarr[10];

我們知道arr是數(shù)組名,數(shù)組名表示數(shù)組收元素的地址。

那么問題來了arr數(shù)組名到底是什么呢??

不如我們來段代碼吧!

由此可以得出數(shù)組名和數(shù)組名打印的地址是一樣的。

我們再來看一段代碼!

根據(jù)代碼我們發(fā)現(xiàn),其實arr和arr,雖然值是一樣的,但是意義應(yīng)該不一樣

實際上arr表示的是數(shù)組的地址而不是數(shù)組首元素的地址。

數(shù)組的地址+1跳過整個數(shù)組的大小,所以arr+1相對于arr的差值是40.

野指針

概念:野指針就是指針指向的位置是不可知的,(隨機性的丶不正確的丶沒有明確限制的)

野指針成因

1.指針未初始化

2.指針越界訪問

如何避免野指針

指針初始化小心指針越界指針指向空間釋放即使置NULL避免返回局部變量的地址指針使用之前檢查有效性

指針運算

小時候我們就知道1+1等于幾那我問你如果是指針加1的話加的是那個數(shù)字嗎?

下面來看一段代碼:

這里我們可以發(fā)現(xiàn)p跟p+1相差1

這里c是多少呢?

16進制的C的10進制是12,所以q+1和q相差4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論