2013-04-22 313 views
2

你好,我正在學習C並且正在學習一個教程,我已經閱讀了關於指針基礎的知識。解釋c指針參數

main(int argc, char *argv[]) 

我真的不明白如何解釋char *argv[]

作爲CharPointer指向argv數組還是指向由char組成的chararray指針?

[更新]

我也許錯了,但是我覺得我很困惑,我所熟悉的:

的char * argv的[] //字符指針數組 字符的argv [] * //集在指針對象值

但是我從來沒有見過的char * argv的[]

+1

試試這個【答案】(http://stackoverflow.com/questions/4176326/arguments-to-main-在-C)。我相信這已經被問過。 – 2013-04-22 01:23:39

+1

感謝分享!我有興趣瞭解C如何獲得更多的技術參數。 – laycat 2013-04-22 01:37:48

回答

2

你由內而外的閱讀C聲明,牢記主要運營商.->,並[]比一元運算符像*更高的優先級。所以你從左到右,從裏到外,從最深層嵌套開始,並選擇優先權左側或右側。

char *argv[]; // argv is an array of pointer to char 
int (*f)(); // f is a pointer to a function returning int 

下面是一個完整的例子,我只是做,你可以運行:

int main(void); 

// g is an array of pointer-to-function with no parameters returning int 
int (*g[])(void) = { 
    main, 
    main 
}; 

// f is an array of pointer-to-array of pointer-to-function returning int 
int (*(*f[2])[2])(void) = { 
    &g, 
    &g, 
}; 


int main(void) { 
    return *f[0][0] == main; 
} 

$ ./a.out 
$ echo $? 
# => 1 
+0

爲最後一個,我可能錯了,但我正在讀它,返回f是一個二維數組指針。 指針請*雙關意圖* – laycat 2013-04-22 14:56:37

0

你應該閱讀這是一個字符指針到char,因爲你的方式將它定義數組,但不要忘記有任何形式沒有區別指針(char,int,voi。) D,浮動等)他們都是地址變量(某種)。

+0

我是否將左側的說法從右向左或從右向左? – laycat 2013-04-22 01:50:50

0
char *argv[] 

argv是變量/參數名稱,它不是一個type,所以CharPointer points to argv array並不瞭解它的正確方法。可以說一些pointer to int array or double array,因爲intdouble是類型。

char* argv[]實際上是一個數組char*(讀取指向char的指針數組),基本上是一串C字符串。

+0

我也許錯了,但是我覺得我很困惑,我所熟悉的: 的char * argv的[] //字符指針數組 字符的argv [] * //在指針對象設定值 但是我從來沒有見過的char * argv [] – laycat 2013-04-22 01:51:38

+0

@laycat我從來沒有見過char argv [] *,但char * argv []在C++中非常常見。你在哪看到char argv [] *? – taocp 2013-04-22 01:54:17

+0

我犯了一個錯誤我看到一個像pointerX 45 *這樣的語句來改變變量的值是類似於char * argv []? – laycat 2013-04-22 03:02:58