日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bean找不到报空指针_为什么C指针可以实现函数间的通信呢?

發(fā)布時(shí)間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bean找不到报空指针_为什么C指针可以实现函数间的通信呢? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

指針最偉大的意義在于,指針是面向內(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。