c語言空指針函數(shù)傳遞問題 c語言中空指針用什么表示

C語言用指針傳遞參數(shù)的問題

指針傳遞參數(shù)實例:

成都創(chuàng)新互聯(lián)公司專注于光澤網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供光澤營銷型網(wǎng)站建設(shè),光澤網(wǎng)站制作、光澤網(wǎng)頁設(shè)計、光澤網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造光澤網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供光澤網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

void?fun1(?int?*p?)?//此函數(shù)接受一個指針p,也就是說p是別人傳過來的一個int類型的地址

{

printf("?%d",?p);??///打印p的值,注意p是地址,所以打印的是一個內(nèi)存地址

printf("%d",?*p);?///打印指針p所指向的內(nèi)存單元的值,那要看p是誰傳過來的,它以前值是多少?

*p?=?0;??///把p所指向的內(nèi)存單元賦值為0

}

main()

{

int?a??=?90;??///定義一個整形變量,存放90

fun1(?a)?;??//調(diào)用fun1函數(shù),并把變量a的地址傳遞過去

//注意,a剛開始存放的是90,執(zhí)行完后a內(nèi)容就變成0了

}

希望能幫到你,望采納哈!

C語言的指針傳遞,指針的指針的問題,誰能幫我分析分析這個問題?

首先,int *num[] 是指針數(shù)組 ,存放的是數(shù)組元素a[0]-a[5]的地址。

再說sort 參數(shù),傳入的是數(shù)組num的首地址 ,以及 n 要排序的元素個數(shù)。

if(*num[k]*num[j])里 ,num[i]為對應(yīng)數(shù)組元素a[i]的地址,顯然*num是取a[i]的值,也就是說

*num[k]等同于a[k],不同的是,如果你傳入的形式是a[i],只是單純的形參,變量存放在堆棧中,單純的交換了變量的值,當(dāng)函數(shù)運行結(jié)束后,會釋放掉堆棧,這些變量值也就被釋放掉,所以實際a中內(nèi)容也沒有改變。如果傳入的是地址,同樣指針也是4字節(jié)的形式(32cpu int 地址32位,64位cpu指針就是64位的地址)存放在堆棧,但下面的交換代碼里是對這些地址所在位置的值 ,即儲存a的內(nèi)存元素進行交換,這就是你說的a內(nèi)容里面的值也被交換了,當(dāng)函數(shù)運行結(jié)束后,堆棧也被釋放,指針也就不存在了。但a的作用域在該函數(shù)外,即使該函數(shù)結(jié)束,也沒有權(quán)利釋放掉a所在內(nèi)存,所以a的值被交換,就是永遠(yuǎn)的被交換了。你調(diào)用sort(a)明顯也是對地址進行操作的,也是會改變a里面的值。至于形參和實參的問題,形參永遠(yuǎn)不會影響實參的,即使形參與實參的名字相同,也不會分配到內(nèi)存同一個地址,函數(shù)結(jié)束形參就隨著棧的銷毀而銷毀,會對實參造成影響是因為是直接對某個內(nèi)存地址就行了操作,直接修改了某個內(nèi)存地址的值。

如果以上看不懂,那么你要好好的看下數(shù)據(jù)結(jié)構(gòu) ,做為程序員,正真要弄懂指針,必須也要明白內(nèi)存中是怎么存放的。雖然操作系統(tǒng)的mmc內(nèi)存管理使編程員很少直接對內(nèi)存去操作,而高級語言變量在內(nèi)存的存放又被編譯器做了,但有些東西不知道,你就無法理解,更別談編程了。

何況現(xiàn)在很少的學(xué)校有開設(shè)數(shù)據(jù)結(jié)構(gòu)這門課。。我也很納悶,數(shù)據(jù)結(jié)構(gòu)和算法導(dǎo)論都不學(xué)的,何談編程,何談程序員。。。。。。

對c指針的講解,建議你看下c和指針 ,還是不錯的一本書,前面都是基礎(chǔ),可以忽略,后面涉及指正的部分還是很精華的。

至于第2個問題:這是數(shù)組指針里面的東西了,想要弄懂就去看我說的那本書吧。我簡單說下:

int a[10];

int *p ;

p=a; 這你應(yīng)該懂 ,就是普通的指針。*p就是 a 數(shù)組的首地址a[0]。*(p+1)就是a[1];

*p[10],可以理解為數(shù)組p[10],每個元素均為指針,即這個數(shù)組存放的元素也均為指針 ,

這里有10個數(shù)組a[10],b[10],c[10].....

p[0]=a,

p[1]=b,

............

p[9]=c,依次元素p[0]-p[9]均為指針 分別指向10個數(shù)組,即a,b,c.......

因此 *p 代表p數(shù)組的p[0]元素,不懂參考上面的普通指針

*(p+1)代表p[1]元素,*(p+2) 就是p[2].

但這只是尋址p 怎么尋址a呢

p[0]就是a p[1]就是b ......

所以 *p 是a 那么**p就是 *(p[0]) 就代表 a[0] *(*p+1) 就是 *(p[0]+1)代表a[1]

*(p+1)是b 那么 **(p+1)就是*(p[1]) 是b[0] *(*(p+1)+1) 就是*(*p[1]+1))就是b[1]

這里懂了 那么上面你的問題就很簡單了

但是不幸的是,這只是一維數(shù)組指針。。。。指針還涉及到 函數(shù)指針,多維數(shù)組的指針,等等,靈活運用指針可以很容易的設(shè)計程序結(jié)構(gòu),使得代碼也更緊湊,所以說指針是c的精華,想要弄懂確實不易,但真正明白本質(zhì),“指針即地址”這句話,你再回頭看這些,其實也不難,而且很簡單。

總之就是多看代碼,多寫代碼 ,多看書,祝君好運?。?!

C語言傳遞函數(shù)指針參數(shù)能否傳遞NULL

可以,但子函數(shù)中要謹(jǐn)慎處理,不然會出問題,如

int fun( int *p )

{

//if ( *p !=0 ) 錯誤的引用方法,會導(dǎo)致程序異常

if ( p *p ) //正確的引用方法,保證p不是NULL時才讀。

return 1;

return 0;

}

void main()

{

int x=fun(NULL) ;

}

經(jīng)常用到的time(NULL); 也是傳NULL指針的一個應(yīng)用。

網(wǎng)站題目:c語言空指針函數(shù)傳遞問題 c語言中空指針用什么表示
本文網(wǎng)址:http://muchs.cn/article48/doeijhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、做網(wǎng)站、企業(yè)建站、網(wǎng)站設(shè)計網(wǎng)站策劃、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)