簡體   English   中英

argv函數和字符串作為C語言中的地址

[英]argv function and string as address in C language

題。 諸如“ C編程”之類的字符串如何被編譯為如下的地址值?

 #include <stdio.h>

 void ShowAllString(int argc, char * argv[]) 
 {
     int i;
     for(i=0; i<argc; i++)
        printf("%s \n", argv[i]);
 }

 int main(void)
 {
     char * str[3]={
         "C Programming",
         "C++ Programming",
         "JAVA Programming"  };

    ShowAllString(3, str);
    return 0;
  }

我的類比如下:如果可以,請更正我。

char * argv []如果在參數中,則等效於char ** argv。 因此,該函數就像void ShowAllString(int argc,char ** argv)一樣,以接收雙指針作為參數。 因此將str作為參數是有意義的,因為str是數組char * str [3]的名稱,而str是數組名稱的雙指針。 char * str [3]是一個應該包含三個指針元素的數組....但是為什么這樣的字符串而不是地址值被放置在char * str [3]旁邊...這就是我被困住的地方!

請幫我!

將數組名稱作為參數傳遞時,它會衰減為指針。 在您的代碼中,您有3個指針的數組。 因此,它衰減為指向指針的指針。

在C語言中, char[]是指向char數組存儲位置的指針,在內存中一個接一個。 碰巧的是,這是存儲字符串的好方法。 在您的代碼中,您將創建一個由3個指針組成的數組,這些數組指向char數組。 第一個str[0]指向char “ C編程”序列存儲在內存中的位置,依此類推。

(在日常英語中,通常將“ char的序列”稱為“字符串”,但是從技術上講,正如第一個注釋正確指出的那樣,這意味着char[]從定義上必須表示字符串,而實際上並不是。)

您將指針傳遞給該函數的指針數組,然后該函數將檢索到每個char數組(“ strings”)的指針, printf行將其用於獲取字符串( char數組)並打印它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM