子函數(shù)中定義的一般指針變量,在子函數(shù)結(jié)束之后會被自動釋放,如果返回這種局部指針變量,調(diào)用者一般是不能正確讀到指針地址中的數(shù)據(jù)的。
目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、扶綏網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
指向一維數(shù)組的指針就是一個數(shù)組指針,定義一個數(shù)組指針是int (*b)[4],所以函數(shù)應(yīng)該是int (*)[N]f(),N為一維數(shù)組的維數(shù)。
首先,你不應(yīng)該返回局部變量的指針,因為局部變量在離開函數(shù)后就會被銷毀。如果你想這樣返回一個數(shù)組的話,你應(yīng)該malloc出一個數(shù)組來返回。至于應(yīng)該return什么,return (malloc出來的那個指針)就可以了。
指向數(shù)組的指針要這樣定義:int (*p)[7];這個p是一個指針變量,專門用來指向“包含7個int元素”的數(shù)組,可以這樣為p賦值:p=。由此也可以看出,樓上說的是錯的。
方法2:傳遞數(shù)組指針 分析:在教學(xué)過程中,我們知道C語言函數(shù)參數(shù)的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調(diào)函數(shù)把實參的值復(fù)制給形參,形參獲得從主調(diào)函數(shù)傳遞過來的值運行函數(shù)。
=== int (*p)[4]; 這是數(shù)組指針,用于指向4個元素一行的數(shù)組。p= &a[0]; 讓 它指向 數(shù)組 的開始地址。程序中可以用 p[i][j] 代替 a[i][j] 使用。
1、指針可以返回,但是要注意函數(shù)內(nèi)部的數(shù)組用指針返回后,到了函數(shù)外面,這個數(shù)組已經(jīng)被釋放了。所以是個野指針,用了就死機!這種情況可以動態(tài)申請一段內(nèi)存,比如malloc函數(shù),用完后再用free函數(shù)釋放內(nèi)存。
2、首先,你不應(yīng)該返回局部變量的指針,因為局部變量在離開函數(shù)后就會被銷毀。如果你想這樣返回一個數(shù)組的話,你應(yīng)該malloc出一個數(shù)組來返回。至于應(yīng)該return什么,return (malloc出來的那個指針)就可以了。
3、C語言屬于高級編程語言。在C語言中一個函數(shù)不能返回局部地址即指針。
4、按照這段代碼來說,int* 聲明的指針指向內(nèi)存中的一塊地址,而在這塊地址中存儲著一個整形數(shù)值。所以要返回這樣的值,也就相當于是返回一個內(nèi)存地址。
函數(shù)A的返回值錯誤。雖然地址和指針很像,但還是不同的兩個東西。而且,一旦出了函數(shù)A,返回的地址,也就該被回收,會導(dǎo)致程序出錯。是非常危險的行為。舉個例子說明下吧。
struct student *p, *q, *head;這里head不就是 struct student 類型的指針么。
p是指向局部變量的指針,當函數(shù)退出時,局部變量會被釋放,這時,p所指向的位置就不一樣是原來的數(shù)。因為fun()函數(shù)返回的值被計算機的臨時變量存放,當賦值給p的時候,p是指向臨時變量的地址,所以還可以讀取出100。
st *fun(struct st x)這里的形參x其實是傳遞的實參y的拷貝,這和形參不能影響實參是同樣的道理。