c語言函數(shù)不能返回??臻g c語言函數(shù)不能返回??臻g嗎

c語言函數(shù)返回問題

樓主針對你這句給你解釋下:

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的蕪湖網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

“str 屬于局部變量,位于棧內(nèi)存中,在Func 結(jié)束的時候被釋放,所以返回str 將導(dǎo)致錯誤。

為什么當(dāng)返回的是int *p類型時卻正確?按理說應(yīng)該都被釋放了。”

無論是 str還是整型指針p所指向的空間,確實(shí)都已經(jīng)被釋放了,只是這個釋放你要理解清楚,一般的編譯器,釋放!=清零(至少我沒見過釋放同時會清零相應(yīng)內(nèi)存的編譯器),釋放只是告訴系統(tǒng),這一塊內(nèi)存我不用了,他就像海域的公海一樣,只要你還有這塊內(nèi)存的地址,一樣可以訪問,只是這段內(nèi)存隨時可能分配給其他進(jìn)程使用,隨時可能被修改,在被其他進(jìn)程占用修改之前,你都是可以訪問這段內(nèi)存的(因?yàn)獒尫艃?nèi)存時,指針變量str和p的值不會變,始終指向給他賦值時指向的那一塊內(nèi)存空間,盡管指向的內(nèi)存已經(jīng)不歸本進(jìn)程使用,其實(shí)現(xiàn)在str和p已經(jīng)就是所謂的野指針)。

整型指針?biāo)赶虻膬?nèi)存塊只有四個字節(jié),一般釋放后馬上被分配給其他進(jìn)程,并被修改的可能性不大,如果是一個字符串,一旦代表字符串結(jié)束符的‘\0’被修改,很容易就會報一個訪問越界,或段錯誤…………

一般編程的時候,不要返回一個局部變量指針,這種錯誤是非常危險的,因?yàn)樗裁磿r候出錯是有一定的隨機(jī)性,以后排錯的時候都很難,就像野指針一樣。

C語言中函數(shù)返回指向棧內(nèi)存的指針的問題

p是指向局部變量的指針,當(dāng)函數(shù)退出時,局部變量會被釋放,這時,p所指向的位置就不一樣是原來的數(shù)。

因?yàn)閒un()函數(shù)返回的值被計(jì)算機(jī)的臨時變量存放,當(dāng)賦值給p的時候,p是指向臨時變量的地址,所以還可以讀取出100。

*p = "hello"這是常量字符串,從靜態(tài)存儲區(qū)分配,第一步字符串"hello"從靜態(tài)存儲區(qū)獲取一塊內(nèi)存,指針變量p才指向這塊靜態(tài)內(nèi)存,這塊內(nèi)存的特點(diǎn)是從程序開始到結(jié)束一直從在,所以可以返回。

擴(kuò)展資料:

函數(shù)的返回值類型是在定義函數(shù)時指定的。return 語句中表達(dá)式的類型應(yīng)與定義函數(shù)時指定的返回值類型一致。如果不一致,則以函數(shù)定義時的返回值類型為準(zhǔn),對 return 語句中表達(dá)式的類型自動進(jìn)行轉(zhuǎn)換,然后再將它返回給主調(diào)函數(shù)使用。

在調(diào)用函數(shù)時,如果需要從被調(diào)函數(shù)返回一個值供主調(diào)函數(shù)使用,那么返回值類型必須定義成非 void 型。此時被調(diào)函數(shù)中必須包含 return 語句,而且 return 后面必須要有返回值,否則就是語法錯誤。

參考資料來源:百度百科-返回值

return不可返回棧內(nèi)存是什么意思

C語言中的return命令結(jié)束函數(shù),返回調(diào)用者

如果函數(shù)定義是有返回值的,則return 后面會跟一個相應(yīng)類型的常量或變量,目的是返回給調(diào)用者一個數(shù)據(jù)(數(shù)值)。

函數(shù)定義格式:

返回值類型 函數(shù)名( 形參及類型 )

{

函數(shù)語句;

return 相應(yīng)返回值類型的常量或變量 ;

}

返回值是需要調(diào)用者用變量來接收的,不是顯示到屏幕上的。如果需要輸出返回值,則需要調(diào)用相應(yīng)的輸出語句,進(jìn)行數(shù)據(jù)輸出。

例:

int max( int a, int b )

{

if ( ab ) return a;

else return b;

}

char *input(char *s )

{

gets(s);

return s ;

}

void main()

{

int a=3,b=5;

int m;

m=max(a,b); //用m接收返回值

printf("max=%d\n", m ); //輸出

char str[100];

char *p;

p=input(str); //指針變量p接收返回值

printf("input=%s", p ); //輸出地址中的字符串?dāng)?shù)據(jù)

}

為什么C語言函數(shù)中可以返回局部變量而不能返回局部變量的指針??詳解+深解

在C語言中,局部變量的作用域只在函數(shù)內(nèi)部,在函數(shù)返回后,局部變量的內(nèi)存就會被釋放。如果函數(shù)只是返回局部變量,那么這個局部變量會被復(fù)制一份傳回被調(diào)用處。但是如果函數(shù)返回的是局部變量的地址,那么就會報錯,因?yàn)楹瘮?shù)只是把指針復(fù)制后返回了,但是指針指向的內(nèi)容已經(jīng)被釋放,這樣指針指向的內(nèi)容就是不可預(yù)料的內(nèi)容,程序就會出錯。準(zhǔn)確的來說,函數(shù)不能通過返回指向棧內(nèi)存的指針(返回指向堆內(nèi)存的指針是可以的)。

C語言函數(shù)不能返回局部變量或者形參的地址?為什么

我給你從編譯器角度考慮下吧!1、首先局部變量的使用范圍只有在這個局部范圍類有效。2、函數(shù)是模塊化的思想。比如你有一個判斷一個數(shù)是否是素?cái)?shù)的函數(shù)。那么你再求100以內(nèi)所有素?cái)?shù)和的時候,main中會調(diào)用這個函數(shù)100次。這些函數(shù)編譯器在處理的時候都是放在一個堆棧的。而且每個函數(shù)都占有不同的地址和空間。(遞歸函數(shù)尤為明顯)。最關(guān)鍵的是,當(dāng)函數(shù)返回函數(shù)值后,函數(shù)的使命就結(jié)束了。所以這個函數(shù)體在呢內(nèi)存中就銷毀了。你即使能從函數(shù)中返回一個局部變量。你再去讀這個地址的時候。東西都不在了。3、還有一點(diǎn)。編譯器在分配函數(shù)的空間的時候,地址不是固定的。所以你每次運(yùn)行程序,你會發(fā)現(xiàn)

int

a=3

printf(f"%d",a),不都是一樣的。所以你的問題很明了了。

分享題目:c語言函數(shù)不能返回??臻g c語言函數(shù)不能返回??臻g嗎
分享URL:http://m.kartarina.com/article30/hgjspo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣網(wǎng)站制作、Google、標(biāo)簽優(yōu)化、商城網(wǎng)站小程序開發(fā)

廣告

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

小程序開發(fā)
主站蜘蛛池模板: 人妻丰满熟妇AV无码区HD| 亚洲精品无码专区久久同性男| 无码aⅴ精品一区二区三区浪潮 | 自拍中文精品无码| 亚洲av无码潮喷在线观看| 亚洲精品无码中文久久字幕| 国产又爽又黄无码无遮挡在线观看 | 精品亚洲av无码一区二区柚蜜| 国产亚洲精品无码专区| 无码人妻丰满熟妇区五十路| 亚洲欧洲日产国码无码久久99| 久久久久无码精品国产h动漫| 亚洲av无码无在线观看红杏| 精品亚洲av无码一区二区柚蜜 | 国产精品无码一区二区在线| 久久亚洲精品无码AV红樱桃| 无码乱码观看精品久久| 亚洲AV无码AV男人的天堂不卡| 亚洲国产精品无码中文字| 国产午夜鲁丝片AV无码| 久久亚洲AV成人无码国产最大| 精品无码久久久久久尤物| 无码无套少妇毛多18p| 人妻中文无码久热丝袜| 亚洲精品无码成人片在线观看| 精品少妇人妻AV无码专区不卡 | 亚洲精品中文字幕无码A片老| 亚洲AV无码专区国产乱码4SE| 精品人妻无码专区中文字幕| 国产精品va无码二区| 无码专区国产精品视频| 国产精品va无码二区| 亚洲精品无码专区2| 最新无码A∨在线观看| 精品久久久久久无码人妻热| 亚洲无码高清在线观看| 久久伊人亚洲AV无码网站| 成年无码av片完整版| 亚洲AV无码成人网站久久精品大| 亚洲AV无码成人精品区天堂| 亚洲中文字幕久久精品无码2021|