bean找不到报空指针_为什么C指针可以实现函数间的通信呢?
指針最偉大的意義在于,指針是面向內(nèi)存的.而變量的本質(zhì)是一小塊固定大小的內(nèi)存,不嚴(yán)謹(jǐn)?shù)恼f,它包括:變量名稱 變量地址 和 變量數(shù)值.對(duì)于其他語言尤其是面向?qū)ο笳Z言來說,編程并不面向內(nèi)存,內(nèi)存的控制與回收甚至已經(jīng)安排了具體的算法進(jìn)行,你只需要進(jìn)行”宏觀調(diào)控”就可以,或者說,內(nèi)存的處理細(xì)節(jié)被封裝為不需要程序員具體關(guān)注 不準(zhǔn)程序員調(diào)用.但指針則是C語言提供的一個(gè)接口,通過這個(gè)接口提供的方法我們才得以操作內(nèi)存.
在C語言里調(diào)用函數(shù)時(shí),實(shí)際參數(shù)傳遞到被調(diào)函數(shù)后,無論在被調(diào)函數(shù)進(jìn)行了什么運(yùn)算都不會(huì)影響它在主調(diào)函數(shù)的具體數(shù)值,因?yàn)檎{(diào)用函數(shù)會(huì)創(chuàng)造實(shí)際參數(shù)的副本,這些副本都是局部變量,無法影響主調(diào)函數(shù).
但是有一個(gè)例外,使用指針可以實(shí)現(xiàn)函數(shù)間的交流,那么這具體的原理,或者說我們應(yīng)該如何認(rèn)識(shí)指針的這個(gè)用法呢?
指針指向變量的實(shí)質(zhì)是,指向變量的那一份內(nèi)存,如果傳遞指針作為參數(shù),固然,我們?nèi)匀粫?huì)創(chuàng)造實(shí)際參數(shù)的副本,但是這個(gè)副本和原來在主調(diào)函數(shù)占據(jù)形式參數(shù)位置的實(shí)際參數(shù)的指針,指向的內(nèi)存是一樣的,雖然局部變量隨著被調(diào)函數(shù)運(yùn)行完畢,其生命期達(dá)到終結(jié),但是內(nèi)存時(shí)不變,只要它不被回收.
那么我們可以舉一個(gè)例子,這個(gè)例子的內(nèi)容就是利用指針在被調(diào)函數(shù)就完成主調(diào)函數(shù)兩個(gè)變量的值的交換操作.
---------下面是代碼-----------
//以下代碼在win10家庭版環(huán)境下運(yùn)行,編譯器TDM-GCC4.9.2
#include<stdio.h>
void interchange(int * , int * );
int main(void)
{
int x = 5 , y =10 ;
printf(“x = %d y = %d n”,x , y);
interchange(&x,&y);
printf(“Now x = %d y = %d”,x,y);
return 0;
}
void interchange(int * u ,int *v)
{
int temp;
temp = *u;
*u = *v;
*v = temp;
}
-----------------分割線----------------------
以上的程序邏輯就是把 兩個(gè)整數(shù)變量x和y的值交換.
在主函數(shù)中,我們調(diào)用了函數(shù)interchange,該函數(shù)的形式參數(shù)是兩個(gè)指針變量,在被調(diào)函數(shù)內(nèi)部,我們可以看到被操作的被運(yùn)算的是”指針指向的內(nèi)存”.
作為一元操作符,*的邏輯就是把指針”解引用”,換句話說,對(duì)指針指向的內(nèi)存進(jìn)行操作,計(jì)算機(jī)無法進(jìn)行交換邏輯操作,我們使用賦值操作模擬交換操作,也就是說這個(gè)交換的本質(zhì)是賦值,我們既不是對(duì)兩個(gè)int類型的變量進(jìn)行賦值,也不是對(duì)兩個(gè)指針進(jìn)行賦值,而是對(duì)內(nèi)存進(jìn)行賦值.很多教程里說,通過指針解引用,我們?cè)L問了指針指向的變量,但我認(rèn)為更準(zhǔn)確的說法是,我們?cè)L問了指針指向的內(nèi)存,這兩個(gè)主函數(shù)地址的副本指向和主函數(shù)地址相同的內(nèi)存,我們對(duì)局部指針解引用后的內(nèi)容進(jìn)行操作.
我想強(qiáng)調(diào)的是,在這里,這兩個(gè)指針是局部的,生命期在interchange函數(shù)內(nèi),函數(shù)執(zhí)行完,它們的內(nèi)存就會(huì)被回收,但是這兩個(gè)指針指向的 x 和 y 的內(nèi)存 在程序執(zhí)行完之前是不會(huì)被回收的,因此,被調(diào)函數(shù)和主調(diào)函數(shù)實(shí)現(xiàn)了函數(shù)通信,但本質(zhì)上是被調(diào)函數(shù)和內(nèi)存的通信.
在下學(xué)識(shí)淺薄,被指針惡心了一下,便努力尋找資料來解決,得出了自己的一點(diǎn)看法,但這很有可能是錯(cuò)誤的,如有大牛指出這個(gè)理解的不當(dāng)之處,我一概接受,我在這里寫出這些的目的是不讓其他和我一樣在這方面的認(rèn)識(shí)有問題的人,到處找資料,結(jié)果什么也找不到,在此我再次強(qiáng)調(diào),如果有大牛指出這篇文章荒謬可笑這可能是真的,如果這篇文章一點(diǎn)用武之地都沒有,我會(huì)自行刪除,如需轉(zhuǎn)載……隨你們便,反正我也不玩知乎,盡請(qǐng)各位大佬指正.
總結(jié)
以上是生活随笔為你收集整理的bean找不到报空指针_为什么C指针可以实现函数间的通信呢?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 古墓丽影崛起卡牌有什么用(中国十大著名古
- 下一篇: 怎么改变rofl格式_手机怎么裁剪视频尺