由于你在子函數(shù)int *shuzu(void)中定義的數(shù)組 a[4];屬于局部變量,在子函數(shù)結(jié)束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數(shù)組定義在主函數(shù)之前(#include stdio.h下面),那么就變成了全局變量,不會被釋放了;2.使用malloc或者calloc開空間后再賦給這個數(shù)組,這樣也不會被釋放了;第一種方法有缺點,以后學到全局變量的時候會知道,第二種方法估計你還沒學到,不過很簡單,百度一下就會了~~~
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供金灣網(wǎng)站建設、金灣做網(wǎng)站、金灣網(wǎng)站設計、金灣網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、金灣企業(yè)網(wǎng)站模板建站服務,十年金灣做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然后換成我指向她,他指向你,你把他們指向的位置交換,而并沒有交換他們地址里面存儲的值,這樣是并沒有任何區(qū)別,在最后函數(shù)結(jié)束之后,函數(shù)的那些指針指向全部釋放,和修改不修改沒什么兩樣;定義的是一個整型變量,他把s
指針指向的地址里面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內(nèi)存里面的值,即便是函數(shù)結(jié)束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數(shù)內(nèi)部定義的局部變量,現(xiàn)在你已經(jīng)把s的地址通過return
返回回來并且存在
主函數(shù)的
r
中了,所以自然就不會釋放了
首先,你不應該返回局部變量的指針,因為局部變量在離開函數(shù)后就會被銷毀。如果你想這樣返回一個數(shù)組的話,你應該malloc出一個數(shù)組來返回。
至于應該return什么,return
(malloc出來的那個指針)就可以了。
例如
int**
foo()
{
int
**p
=
(int
**)malloc(sizeof(int
*)*10);
...
...
...
return
p;
}
這個p指向一個內(nèi)存段,這個內(nèi)存段存有十個int*類型的元素。
int *func( int n )
{
int *a=(int *)malloc(sizeof(int)*n);
return a ; //直接返回指針變量就可以了!
}
本文標題:c語言子函數(shù)怎么返回指針,c++ 函數(shù)返回指針
文章來源:http://aaarwkj.com/article48/dssgoep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、面包屑導航、企業(yè)網(wǎng)站制作、網(wǎng)站建設、、定制網(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)