[問題] 請教函數回傳陣列指標的問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dec-C++ 4.9.9.2
問題(Question):
大家好,小弟想請教2個函數回傳陣列指標的問題:
問題1,code如下:
double* funct()
{
double mat[5]={3,6,8,12,13}; //設置一維陣列並指定陣列元素數值
cout << "in funct:" << endl;
for (int i=0; i<5 ; i++)
cout << mat+i << "\t"; //印出陣列元素記憶體位置
cout << endl;
for (int i=0; i<5 ; i++)
cout << *(mat+i) << "\t"; //印出陣列元素數值
return mat; //回傳給main陣列mat的記憶體位置(指標)
}
int main()
{
double* mat_main;
mat_main = funct(); //mat_main接收funct中mat的記憶體位置
cout << endl << "in main:" << endl;
for (int i=0; i<5 ; i++)
cout << mat_main+i << "\t"; //印出陣列元素記憶體位置
cout << endl;
for (int i=0; i<5 ; i++)
cout << *(mat_main+i) << "\t"; //印出陣列元素數值
system("pause");
return 0;
}
結果:
in funct:
0xbf8fa748 0xbf8fa750 0xbf8fa758 0xbf8fa760 0xbf8fa768
3 6 8 12 13
in main:
0xbf8fa748 0xbf8fa750 0xbf8fa758 0xbf8fa760 0xbf8fa768
-2.07167e-41 -2.07167e-41 4.86669e-270 2.12864e-313 8.48798e-314
網頁程式碼:http://ideone.com/XxVedC
問題1:
我在函數funct中設了一維陣列的數值,然後回傳陣列的記憶體位置(指標)回main函數
記憶體位置有正確回傳到main中,也成功可以印出
但是用*(mat_main+i),為什麼沒有辦法print出在funct函數中的一維陣列的數值呢?
我想了一下原因
是不是因為funct中的mat是一個區域變數,所以funct呼叫完返回main就釋放掉了?
可是我覺得,雖然是釋放掉了,但是釋放掉的應該是mat與記憶體位置0xbf8fa748的連結
而0xbf8fa748 0xbf8fa750....等等記憶體上的「殘值」,應該是還保留著吧?
為什麼我返回main中就print不出來了呢?
問題2:
接續問題1,我把funct中的一為陣列mat改為動態記憶體配置:
double *mat;
mat = new double[5];
mat[0] = 3;
mat[1] = 6;
mat[2] = 8;
mat[3] = 12;
mat[4] = 13;
網頁程式碼:http://ideone.com/oZBoKp
為什麼就可以成功在main中印出函數funct中mat的陣列數值呢? @@"
萬分感謝!:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.233.138
※ 編輯: Zcode 來自: 118.168.233.138 (06/02 23:18)
→
06/02 23:29, , 1F
06/02 23:29, 1F
推
06/02 23:29, , 2F
06/02 23:29, 2F
→
06/02 23:29, , 3F
06/02 23:29, 3F
→
06/02 23:30, , 4F
06/02 23:30, 4F
推
06/02 23:33, , 5F
06/02 23:33, 5F
→
06/02 23:33, , 6F
06/02 23:33, 6F
→
06/02 23:34, , 7F
06/02 23:34, 7F
→
06/02 23:38, , 8F
06/02 23:38, 8F