999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

指針在C語言中的作用分析

2012-08-15 00:48:29湖南城市學院通信與電子工程學院
河南科技 2012年18期

湖南城市學院 通信與電子工程學院 舒 翔

指針是C 語言的靈魂,可以這么說,如果沒搞懂指針,就等于沒有學習C 語言。在學習C 語言的時候,很多學生對指針感到很費解,之所以費解,不是因為指針概念有多復雜,而是在使用時會經常犯錯誤,所以在學習時重點要從使用的角度抓住問題的本質,把本質搞清楚以后,在回到最基本的概念入手來分析,問題就能很快解決。

只要變量在內存中存在,必然有一個地址。因為操作系統管理內存就是通過內存的地址的。如,定義一個變量,初始化100,int a=100,那么就會在內存中形成一個布局。在32 位系統中占4 個字節。假設這個變量的地址是1a1b,如果地址是可以用一個數表示,就可以把地址存在一個變量里。因此,再假設有這樣的一個變量,起名字為p,在這個變量里放變量a的地址(1a1b),那么變量p 同樣會在內存中形成一個布局。由此可知指針和變量沒有實質性的區別,而最根本的區別在于其中存放的東西。對于一般的變量,只是給它一個初值或計算的結果,而指針里面存放的是另一個變量地址,可以說,指針的本質就是存放一個變量的地址的變量,如:int* p=&a;即p指向a,a 就是p 所指向的目標,那么p 就是指針,

一、*和&符號

&:取一個變量的地址。*:取一個指針的目標。

int*p 和*p 的區別:int*表示p 是一個指向int 類型的指針,這里*是一個類型說明符。

*p 表示對p 取目標,這里*是一個運算符。

二、二級指針和多級指針

既然p 也是一個變量,那么它在內存中也存在一個地址,并且這個地址同樣也可以放到一個變量(pp)中。那么pp 就是一個指向指針的指針。這里pp 就是二級指針

與此類似,可以進一步得到多級指針的概念,int*pp=&p;//pp 二級指針。

三、指針的應用

1.將指針用于函數的參數,傳遞變量的地址,可以在函數中修改實參的值,代碼如下。

void swap(int*a,int*b){int c=*a;*a=*b;*b=*c;}。通過指針取目標運算,從而實現了對實參的成功交換。

2.指針可以作為函數的返回值,但不要返回局部變量的指針,因為局部變量在函數返回時會被釋放,具體代碼如下:

int* foo(void){int a=100;int* p=&a;return p;//返回局部變量的指針}

但是再看看下面的代碼,也是返回局部變量,在編譯器上運行,沒出錯,可以得到正確的結果。

int add(int a,int b){int c=a+b;return c;}

int main(void){int c=add (10,20)}

這種情況和指針的是不一樣的,實際上在函數返回以前,內存中的return 語句在執行的時候,會把c 的值復制到main 的棧里面,而只有等return 語句先執行完成了才釋放棧,之后才執行其后的右括號。具體來說,編譯器將右括號編譯成一系列匯編代碼,來釋放函數的棧,return 語句執行完成以后,才釋放棧,而在執行return 的時候已經復制了一份c 的值,所以在main 中拿到的是c 的值,而指針的情況拿到的是地址,而這塊地址是已經釋放了內存的地址,是不能得到其目標的值,所以還是那句話,要抓住問題的本質,不要被表面現象所迷惑!

3.野指針和空指針。

int*p//,沒初始化,野指針,*p=100//可能引發錯誤

因p 指向的內存不明確,出于對內存的保護,有可能引發錯誤,打斷進程。若產生段錯誤,解決它的方法有顯式地初始化有效的內存:int a;int*p=&a;

另一種方法是初始化成空指針:int*p =NULL;

4.指針和數組的關系。

(1)數組名可以看做一個指針,所以通過指針可以遍歷一個數組。

(2)數組和指針的區別:數組名是一個常量,不能被賦值,但是指針可接受其他變量的地址。

(3)常量指針和指針常量。常量指針就是指向常量的指針,該指針的目標不可修改,但指針本身可修改,int n=100,const int*p=&n;*p=200//error。指針常量就是指針類型的常量,該指針本身不能修改,但指針目標可被修改。int n=100,int*const p=&n;*p=2//0k.int m=1,p=&m//error.常量指針常量,指針的目標和本身都不可被修改,如cosnt int*const p=&n;

(4)指針和結構體的關系。可以聲明一個指向結構類型的指針,struct mstruct s={1,2,3};聲明結構對象s。struct mstruct*p=&s;聲明指向結構對象s 的指針,則可以通過p 訪問s 的三個成員變量,

四、指針安全問題

char s='a',int*p,p=(int*)&s,*p=1;在這里p 是一個int 類型的指針,它指向的是s 的首地址,在32 位系統中,s 占1 字節,int 占4 字節,最后一條語句不但改變了s 所占的1 字節,還把s 相鄰的3 字節也改變了,那么這3 個里可能存儲了重要的數據,而由于未認真使用指針,這三個字節的值被改變了,造成崩潰性的錯誤。所以在使用指針時,使用者必須清楚指針究竟指向了那里。

主站蜘蛛池模板: 2020国产在线视精品在| 99在线视频精品| 美女一级毛片无遮挡内谢| 日本一本正道综合久久dvd| 亚洲三级网站| 成人自拍视频在线观看| 九九视频免费看| 手机在线国产精品| 国产一区二区三区在线无码| 免费观看三级毛片| 亚洲欧美自拍中文| 日韩精品久久无码中文字幕色欲| 狠狠色噜噜狠狠狠狠色综合久| 中国一级特黄大片在线观看| 国产欧美精品一区二区| 国产特一级毛片| 欧美色99| 91色老久久精品偷偷蜜臀| 丁香婷婷激情综合激情| 亚洲欧洲日产国产无码AV| 国产亚洲一区二区三区在线| 精品国产99久久| 无码免费的亚洲视频| 日韩毛片视频| 丝袜久久剧情精品国产| 伊人成人在线| 暴力调教一区二区三区| 五月天福利视频| 日本高清成本人视频一区| 欧美一级高清片久久99| 国产精品白浆在线播放| 蜜芽国产尤物av尤物在线看| 国产精品分类视频分类一区| 久久久久人妻精品一区三寸蜜桃| 久久婷婷国产综合尤物精品| 亚洲欧美国产高清va在线播放| 午夜丁香婷婷| 麻豆精品在线播放| 国产一区亚洲一区| 亚洲成人网在线观看| 一级一级一片免费| 三上悠亚在线精品二区| 狠狠五月天中文字幕| 免费Aⅴ片在线观看蜜芽Tⅴ| 91午夜福利在线观看| 国产日产欧美精品| 欧美成人精品一级在线观看| 尤物亚洲最大AV无码网站| 成人一级黄色毛片| 茄子视频毛片免费观看| 亚洲天堂精品视频| 亚洲欧洲一区二区三区| 人妻无码AⅤ中文字| 久久黄色免费电影| 欧美黄网站免费观看| 亚洲日产2021三区在线| 99热亚洲精品6码| 国产精品吹潮在线观看中文| 666精品国产精品亚洲| 久久精品娱乐亚洲领先| 欧美日韩成人| 国产乱人伦精品一区二区| 久久精品国产精品一区二区| 干中文字幕| 99这里只有精品在线| 熟妇无码人妻| 亚洲欧美另类日本| 日韩精品免费一线在线观看| 久久久久人妻一区精品| 国产欧美日韩视频怡春院| 天堂网国产| 精品小视频在线观看| 欧美日韩国产在线播放| 欧美亚洲日韩不卡在线在线观看| 六月婷婷精品视频在线观看| 真实国产精品vr专区| 真人高潮娇喘嗯啊在线观看| 97视频在线精品国自产拍| 国产AV无码专区亚洲A∨毛片| 久久久久久久久久国产精品| 国产毛片高清一级国语| 国产欧美日韩18|