線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1231
推到 Plurk!
推到 Facebook!

請問 變數名稱[ ]在主函數和成為引數更變地址的問題!

答題得分者是:ikk
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-06 17:41:40 IP:218.187.xxx.xxx 未訂閱
請問一件事
[code cpp]
# include
void ab(int c[]);
using namespace std;
int main(int argc, char* argv[])
{
int a[3]={1,2,3};
int d[]
={1,2,3};
int *b=a;
cout<<&d[0]< cout<<&b[0]< b =1;
//d =1;
cout< cout< ab(a);
getchar();
return 0;
}
//---------------------------------------------------------------------------
void ab(int c[])
{ cout< c =1;
cout<}

[/code]
為什麼 c[]能更變地址,而d[]卻不能更變地址呢?主是為什麼?
及能不能將a的內容給d[]呢?
能否請大大替我解疑惑呢!謝謝!!

謝謝!
------
-謝謝大大熱心的回覆!謝謝!
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-06 18:17:29 IP:163.28.xxx.xxx 訂閱

d 在 main 裡面是個陣列變數,無法改變其位址, 但其內容是可改的.
c 在ab()中傳入是以int 陣列指標傳入, 所以可對指標做運算.

[code cpp]
將a的內容給d[]
for(int i=0;i<3;i )
d[i] = a[i];

[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-07 11:52:14 IP:59.125.xxx.xxx 未訂閱
想請問難道d沒有辦法可以像c那樣給予其值嗎?

非常感謝大大的解答,謝謝!!
===================引 用 ikk 文 章===================

d 在 main 裡面是個陣列變數,無法改變其位址, 但其內容是可改的.
c 在ab()中傳入是以int 陣列指標傳入, 所以可對指標做運算.

[code cpp]
將a的內容給d[]
for(int i=0;i<3;i )
d[i] = a[i];

[/code]
------
-謝謝大大熱心的回覆!謝謝!
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-07 12:08:26 IP:163.28.xxx.xxx 訂閱
只能宣告成point

[code cpp]
int * d, * orig_d;
d = new int[3];
orig_d = d;
for(int i=0;i<3;i )
d[i] = a[i];
cout< d =1;
cout< d =1;
cout< d =1;

delete [] orig_d;


[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-07 15:17:08 IP:59.125.xxx.xxx 未訂閱
嗯嗯!看來是沒有那種直接給予的方法

請問void ab(int c[]) 的int c[]等同這個 int *c[3]還是這個int *c還是?
(ps:儲存地址值的位置是保留3還是一般的指標只有一個)
謝謝!!
------
-謝謝大大熱心的回覆!謝謝!
編輯記錄
l90425 重新編輯於 2009-04-07 15:20:34, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-07 15:25:15 IP:163.28.xxx.xxx 訂閱
void ab(int c[])
用法與void ab(int * c) 是一樣
------
FPGA驗證, FPGA開發平台, http://smims.com
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-07 15:39:09 IP:210.64.xxx.xxx 訂閱
剛好有空手癢來回你一下,不過,萬一… 你滿意我的回答,也請不要給我分數,我是半路殺出來插花的!  ok?! 請給樓上的前輩…

1/ 補充說明: 肯定沒直接給(改)值的方法,因為那個值經過link後變成"常數"(位址),當然無法把常數再指定或修改成任意的值,這是陣列名與指標最大不同的地方! 詳情要去了解變數與記憶體的關係。

2/ int c[ ] 等同 int *c 而不等於 int *c[3],但雷同於 int c[3] ,我想補充是的最後一個雷同。 int c[ ] 與 int c[3]。 在一維的情形下看不出int c[ ] 與 int c[3]的不同,但在2維的情形時,比如說 int c[ ] [ ] 與 int c [ ] [3] 就有很大的不同。因為有3的這種宣告才可以使用 c[1][2] 之類的取值,相對的另一種則會出錯,因為compiler不知道參數代入的第二維度,以致於算不出對應的值。也許你不太明白,但就記得有這樣一件事就好,以後有用到就可以回想…

3/ a給d的方式除了用for以外,還可以用memcpy(d, a, sizeof(d));

===================引 用 l90425 文 章===================
嗯嗯!看來是沒有那種直接給予的方法

請問void ab(int c[]) 的int c[]等同這個 int *c[3]還是這個int *c還是?
(ps:儲存地址值的位置是保留3還是一般的指標只有一個)
謝謝!!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-04-07 15:42:19, 註解 無‧
aftcast 重新編輯於 2009-04-07 15:44:50, 註解 無‧
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-07 16:07:41 IP:59.125.xxx.xxx 未訂閱
感謝ikk大大aftcast大大的熱心說明,替我解答心中的疑惑,
謝謝!謝謝!!
------
-謝謝大大熱心的回覆!謝謝!
系統時間:2024-04-18 14:14:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!