繁体   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