2010-03-08 258 views
1

**在C中有什麼特別的含義嗎?**運算符在C中表示什麼?

像這樣:

static intparse_one (int argc, char **argv) 
{ 
    cmd_line  *slot; 
    int    value; 
    Flag_name  flag_name; 
    int   i; 

printf("argv %s\n",argv); 
printf("argv[0] %c\n",**argv); 

如果是這樣,那麼該行

**argv 

有意義嗎?我試圖運行的程序令人窒息。如果我嘗試打印它,我會得到一個segmentation fault

第一個printf打印出的字符串很好。第二個printf失敗。

這裏是我得到的輸出(第一行是正確的):

argv -aps_instance1001-aps_ato0-aps_ipc_debug3 

Segementation Fault (core dumped) 
+0

「窒息」是什麼意思?該比較是有效的;它基本上看看是否第一個參數的第一個字符是連字符。 (這可能不是你的意思,因爲第一個參數通常是二進制的名稱,而不是getopt樣式的標誌) – 2010-03-08 19:53:37

回答

9

「難道**在C的任何特殊含義?」

不,它只是兩個dereferences

char **argv 

指:argv解除引用兩次是char。換句話說,argv是指向char的指針。


同爲:

「如果是這樣,那麼該行:**argv有意義」

聲明說**argvchar。在運行時argv將被解除引用兩次;值爲charargv,指向指向char的指針指向。

0

是不是一個指針的指針?我認爲在argv參數前面的**與C#中的ref具有相同的效果,以防您知道C#。

1

是的。

字符** argv的

是一回事

的char * argv的[]

1

*引入了一個間接級。在這種情況下,這意味着argv是一個指向指針的指針。它不是,真的,從技術上講,你可以看到它是一個指針數組 - 它可以被聲明爲char * argv[]

顯然,通過「否」,我的意思是**本身並不是特別的。或者它是特殊的,但不多也不少於****

1

char **argvchar *argv[]相同。

這裏argv是參數向量。

0

雖然字符串「**」確實有明確的含義,但我認爲對問題的回答是「**」不是一個運算符,而是兩個「*」連續。

這與Fortran形成對比,其中「**」是一個單獨的標記並且用作指數運算符。

所以意思是well covered by Martin Beckett,但它確實不是「一個操作員」。

2

**只是兩個*

至於段錯誤,看看你的行printf("argv %s\n",argv);printf預計char *,而不是char **,所以它正在查看指針數組而不是字符數組。 printf正試圖在argv處以字符串的形式打印所有內容,直到它遇到一個零,並且可能在找到一個之前超出界限。

argvchar **,它是一個指向指針的指針,或者在這種情況下是一個指針數組。不要直接打印,因爲它沒有外在含義。 (如果你想看到它,你當然可以打印指針值)。

*argvargv[0]char *,這是一個指向char,在這種情況下是argv的第一個字符串。

**argvchar,在這種情況下,它是argv中第一個字符串的第一個字符。