真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

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

“str 屬于局部變量,位于棧內存中,在Func 結束的時候被釋放,所以返回str 將導致錯誤。

為什么當返回的是int *p類型時卻正確?按理說應該都被釋放了?!?/p>

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

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

一般編程的時候,不要返回一個局部變量指針,這種錯誤是非常危險的,因為它什么時候出錯是有一定的隨機性,以后排錯的時候都很難,就像野指針一樣。

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

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

因為fun()函數(shù)返回的值被計算機的臨時變量存放,當賦值給p的時候,p是指向臨時變量的地址,所以還可以讀取出100。

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

擴展資料:

函數(shù)的返回值類型是在定義函數(shù)時指定的。return 語句中表達式的類型應與定義函數(shù)時指定的返回值類型一致。如果不一致,則以函數(shù)定義時的返回值類型為準,對 return 語句中表達式的類型自動進行轉換,然后再將它返回給主調函數(shù)使用。

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

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

return不可返回棧內存是什么意思

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

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

函數(shù)定義格式:

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

{

函數(shù)語句;

return 相應返回值類型的常量或變量 ;

}

返回值是需要調用者用變量來接收的,不是顯示到屏幕上的。如果需要輸出返回值,則需要調用相應的輸出語句,進行數(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 ); //輸出地址中的字符串數(shù)據(jù)

}

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

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

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

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

int

a=3

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


當前標題:c語言函數(shù)不能返回??臻g c語言函數(shù)不能返回??臻g嗎
URL分享:http://weahome.cn/article/hgjspo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部