[英]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.