0

问题。诸如“C Programming”之类的字符串如何编译为地址值如下?

 #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] 旁边...这就是我卡住的地方!

请帮我!

4

2 回答 2

1

当数组名称作为参数传递时,它会衰减为指针。在您的代码中,您有一个包含 3 个指针的数组。因此它衰减为指向指针的指针。

于 2013-03-29T22:08:31.553 回答
0

在 C 中,char[]是一个指针,指向一个数组的char存储位置,一个接一个地存储在内存中。碰巧,这是存储字符串的好方法。在您的代码中,您正在创建一个包含 3 个指向char. 其中第一个,str[0],指向char“C Programming”序列在内存中的存储位置,依此类推。

(在日常英语中,人们通常将“a sequence of char”称为“string”,但从技术上讲,正如第一条评论正确指出的那样,这意味着char[]根据定义必须表示一个字符串,但它不是。)

You pass a pointer to this array of pointers to the function, which then retrieves the pointers to each of the arrays of char ("strings"), which the printf line uses to get the strings (arrays of char) and print them.

于 2013-03-29T22:14:59.447 回答