亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2012-08-15 00:48:29湖南城市學(xué)院通信與電子工程學(xué)院
        河南科技 2012年18期
        關(guān)鍵詞:常量指針字節(jié)

        湖南城市學(xué)院 通信與電子工程學(xué)院 舒 翔

        指針是C 語言的靈魂,可以這么說,如果沒搞懂指針,就等于沒有學(xué)習(xí)C 語言。在學(xué)習(xí)C 語言的時(shí)候,很多學(xué)生對指針感到很費(fèi)解,之所以費(fèi)解,不是因?yàn)橹羔樃拍钣卸鄰?fù)雜,而是在使用時(shí)會經(jīng)常犯錯(cuò)誤,所以在學(xué)習(xí)時(shí)重點(diǎn)要從使用的角度抓住問題的本質(zhì),把本質(zhì)搞清楚以后,在回到最基本的概念入手來分析,問題就能很快解決。

        只要變量在內(nèi)存中存在,必然有一個(gè)地址。因?yàn)椴僮飨到y(tǒng)管理內(nèi)存就是通過內(nèi)存的地址的。如,定義一個(gè)變量,初始化100,int a=100,那么就會在內(nèi)存中形成一個(gè)布局。在32 位系統(tǒng)中占4 個(gè)字節(jié)。假設(shè)這個(gè)變量的地址是1a1b,如果地址是可以用一個(gè)數(shù)表示,就可以把地址存在一個(gè)變量里。因此,再假設(shè)有這樣的一個(gè)變量,起名字為p,在這個(gè)變量里放變量a的地址(1a1b),那么變量p 同樣會在內(nèi)存中形成一個(gè)布局。由此可知指針和變量沒有實(shí)質(zhì)性的區(qū)別,而最根本的區(qū)別在于其中存放的東西。對于一般的變量,只是給它一個(gè)初值或計(jì)算的結(jié)果,而指針里面存放的是另一個(gè)變量地址,可以說,指針的本質(zhì)就是存放一個(gè)變量的地址的變量,如:int* p=&a;即p指向a,a 就是p 所指向的目標(biāo),那么p 就是指針,

        一、*和&符號

        &:取一個(gè)變量的地址。*:取一個(gè)指針的目標(biāo)。

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

        *p 表示對p 取目標(biāo),這里*是一個(gè)運(yùn)算符。

        二、二級指針和多級指針

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

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

        三、指針的應(yīng)用

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

        void swap(int*a,int*b){int c=*a;*a=*b;*b=*c;}。通過指針取目標(biāo)運(yùn)算,從而實(shí)現(xiàn)了對實(shí)參的成功交換。

        2.指針可以作為函數(shù)的返回值,但不要返回局部變量的指針,因?yàn)榫植孔兞吭诤瘮?shù)返回時(shí)會被釋放,具體代碼如下:

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

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

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

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

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

        3.野指針和空指針。

        int*p//,沒初始化,野指針,*p=100//可能引發(fā)錯(cuò)誤

        因p 指向的內(nèi)存不明確,出于對內(nèi)存的保護(hù),有可能引發(fā)錯(cuò)誤,打斷進(jìn)程。若產(chǎn)生段錯(cuò)誤,解決它的方法有顯式地初始化有效的內(nèi)存:int a;int*p=&a;

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

        4.指針和數(shù)組的關(guān)系。

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

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

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

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

        四、指針安全問題

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

        猜你喜歡
        常量指針字節(jié)
        科學(xué)照亮世界
        ——卡文迪什測定萬有引力常量
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        偷指針的人
        為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
        簡談MC7字節(jié)碼
        低氧低分壓環(huán)境下泡塑吸附火焰原子吸收光譜法測定常量金
        西藏科技(2015年1期)2015-09-26 12:09:20
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
        電測與儀表(2015年5期)2015-04-09 11:30:42
        ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
        論常量函數(shù)的充分必要條件
        两个人看的www中文在线观看| 中文字幕本久久精品一区| 国产国语亲子伦亲子| 风韵饥渴少妇在线观看| 国产WW久久久久久久久久| 精品亚洲视频免费观看网站| 亚洲国产av一区二区四季| 久久久久久久综合综合狠狠| 婷婷亚洲综合五月天小说| 青榴社区国产精品| 日韩av水蜜桃一区二区三区| 亚洲av无码无限在线观看| 双乳被一左一右吃着动态图| 99精品国产第一福利网站| 亚洲一区在线二区三区| 99riav国产精品视频| 夜夜嗨av一区二区三区| 一本大道在线一久道一区二区| 在线观看中文字幕不卡二区| 精品香蕉99久久久久网站| 亚洲精品无码乱码成人| av深夜福利在线| 国产在线视频一区二区三区不卡| 精品国产天堂综合一区在线| 影视先锋av资源噜噜| 国产精品福利久久香蕉中文| 午夜精品男人天堂av| 无码熟妇人妻av影音先锋| 曰本无码人妻丰满熟妇5g影院| 久久精品国产亚洲片| 午夜av天堂精品一区| 日韩精品内射视频免费观看| 夜夜综合网| 久久本道久久综合一人| 激情综合五月| 国产精品成年片在线观看| 午夜精品久视频在线观看| 日本人妻系列中文字幕| 中文 在线 日韩 亚洲 欧美| 欧美一欧美一区二三区性| 在线免费午夜视频一区二区|