函式參數陣列傳遞問題 |
尚未結案
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
#include1.還有函式傳遞陣列是靠指標來傳遞位址 , 位址是陣列的起始位址嗎??? 2.在main()內的cc(name); name陣列名稱是把它的位址傳遞給(*name)[3]陣列指標嗎??? & => *的意思嘛?? 3.還有請問陣列指標什麼情況下用到,除了傳遞多維陣列 & 函式指標 還有什麼情況下用到?? 下面另一個問題 #include發表人 - syao 於 2005/07/28 23:00:25 發表人 - syao 於 2005/07/28 23:03:38 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
syao 您好: 回答之前先做一下背景說明:
1)優先順序的說明:陣列索引[]優先於間接取值運算子'*'與取址運算子'&'。
2)&(變數):取得該變數在記憶體中的位址; *(位址):取得該位址所存放的資料
陣列元素的指定:
例如: int ary[10]; => ary[3] 全等於 *(ary 3),也就是說我們可以依個人喜好使用任一種寫法。 您的提問綜合回答如下:
int (*name)[3]; => name是個指標(由定義 *name 知道,因為括號所以要整個來看),
指向的資料型態為 int [3],即含有三個元素的整數陣列。
所以,(*name),(即 *位址 形式)此刻就是含三個元素的整數陣列,也就是說整個表示一個陣列的起始位址。
因此(*name)[0]就如同上述ary[0]是一樣的意思,也就是所指陣列的第一個元素。
於是在該變數"(*name)[0]"之前加上取址運算子'&',便可以取得該變數的所在位址。 char *name[10]; => name是個含十個元素的陣列變數,其陣列成員的型態均為(char*)。
char name[2][10]; => name是個二維字元陣列,其大小為兩列,每列可以有十個元素。 關於函式指標的討論,請參考我之前的相關回覆,不好意思沒有整理存檔,一時間找不到!
RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
richtop非常感謝你的解答~~ 下面我使用C的printf()使用C++ 的cout差別
#include發表人 - syao 於 2005/07/29 01:55:41 發表人 - syao 於 2005/07/29 01:56:57 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
syao 您好: 在printf(.)中您明確得告訴程式要以何種方式來解讀資料,如:%p, %s;
但是在C 物件導向的程式裡提供了另一個一致方便的輸出入機制,cout, cin;
於是您可以不管或不明確指定資料型態是什麼的情形下,均能一致的輸出與輸入它們,
如:cout << data; or cin >> data;
所以較之C其實是方便且具延展性的(對於習慣操作細節的我,還是習慣用printf(),不過在此要特別聲明:這僅屬個人習慣)!
cout會根據所給予資料的型態來決定相對的輸出方式。
因而您給了字元陣列位址p,自然被當成位址;如果您要把該位址的內容印出,就需要更明確的告知cout,是(*p)。
其實說起來還蠻合理的! 另外再把上次忘了回答的傳指標問題說一下:
在C/C 中,函式的參數是指標(位址)就是傳址呼叫。其目的在能將傳入參數進行修改並傳回修改後的結果。
另一種情況是:如果要傳陣列或者說是一大串相同型態資料時,也可以用該資料段的起始位址。
不過這連帶會發生一些風險,如果您只是要傳資料但不想被函式更改資料內容的話,可能會有誤改的情形出現;
一個解決辦法是在該參數變數前加上const,以避免函式中非預期的更改到資料! RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |