作者 主題: 請教有關GCC指標的問題  (閱讀 6019 次)

0 會員 與 1 訪客 正在閱讀本文。

lotus006

  • 懷疑的國中生
  • **
  • 文章數: 68
    • 檢視個人資料
請教有關GCC指標的問題
« 於: 2004-08-04 10:41 »
各位好!
  小弟想請問在linux之下寫C語言程式時,在使用指標的時候有時候要用到兩個*字號,如int mail(int argc, char **args)才不會出錯,但小弟之前看的C語言書籍卻沒有提到這一點,只有一個*的差別而已,所以想請問為什麼會有這樣的差異,希望懂的大大能夠回應指點小弟,感激不盡,謝謝!

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
請教有關GCC指標的問題
« 回覆 #1 於: 2004-08-04 13:21 »
** 是『指標』的『指標』,是一個儲存指標的陣列。

lotus006

  • 懷疑的國中生
  • **
  • 文章數: 68
    • 檢視個人資料
這位大大好
« 回覆 #2 於: 2004-08-05 12:03 »
這位大大好
  小弟想再提問,是不是只有指標陣列要存取記憶體的位址時才要用到這種用法,如果是指標變數便沒有雙*的出現了呢,之前看書的時候,如果要存取指標陣列的記憶體位址時可以直接使用該指標陣列的變數便可,完全不用加上*,由此說來是不是書上的說法出了問題,還有一個*的指標陣列又代表什麼,可否煩請大大再為小弟解答,多謝!

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
Re: 這位大大好
« 回覆 #3 於: 2004-08-05 12:50 »
引述: "lotus006"
這位大大好
  小弟想再提問,是不是只有指標陣列要存取記憶體的位址時才要用到這種用法,如果是指標變數便沒有雙*的出現了呢,之前看書的時候,如果要存取指標陣列的記憶體位址時可以直接使用該指標陣列的變數便可,完全不用加上*,由此說來是不是書上的說法出了問題,還有一個*的指標陣列又代表什麼,可否煩請大大再為小弟解答,多謝!


代碼: [選擇]

int ** Ptr <==> int Ptr[ x ][ y ];
int *Ptr[ 5 ] <==> int Ptr[ 5 ][ x ];
int ( *Ptr )[ 5 ] <==> int Ptr[ x ][ 5 ];


這樣您能理解嗎?

** 代表整體。
* 加上 [index] 代表存取單一元素。

lotus006

  • 懷疑的國中生
  • **
  • 文章數: 68
    • 檢視個人資料
小弟略有所得
« 回覆 #4 於: 2004-08-10 21:47 »
  本來小弟還在思考大大所留下的程式碼,後來看到大大所寫的兩句話,就豁然開朗了,我想應該是當我們使用陣列時,如果陣列內有五個元素,加上兩個*表示要存取整個陣列,如果是單一元素,則要用上一個*,我想應該是這樣的意思,謝謝大大的指教,感激!

u_n_i

  • 懷疑的國中生
  • **
  • 文章數: 80
    • 檢視個人資料
請教有關GCC指標的問題
« 回覆 #5 於: 2004-08-13 02:35 »
..

.OD

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
    • http://home.kimo.com.tw/abc9250/master.htm
Re: 這位大大好
« 回覆 #6 於: 2004-09-09 14:08 »
引述: "螢火飛"

代碼: [選擇]

int ** Ptr <==> int Ptr[ x ][ y ];
int *Ptr[ 5 ] <==> int Ptr[ 5 ][ x ];
int ( *Ptr )[ 5 ] <==> int Ptr[ x ][ 5 ];


這樣您能理解嗎?
** 代表整體。
* 加上 [index] 代表存取單一元素。

這樣的說明方式:
int *Ptr[ 5 ] <==> int Ptr[ 5 ][ x ];
int ( *Ptr )[ 5 ] <==> int Ptr[ x ][ 5 ];
是第一次看到,覺得有點不妥當。
在此提出個人的觀念:
int *Ptr[5];
==>變數Ptr是一個陣列,大小為5,而元素的型態為int *。
int (*Ptr)[5];
==>變數Ptr是一個指標,指向一個大小為5的int陣列。。
 :D