【问题标题】:Difference between char* argv[] and string argv[] in CC 中 char* argv[] 和 string argv[] 的区别
【发布时间】:2021-11-09 11:27:24
【问题描述】:

两者有什么区别:

  int main(int argc, char* argv[])

和

  int main(int argc, string argv[])

与字符串 argv[] 相比,char* argv[] 的表现如何?为什么我们需要字符串 argv[]?

为什么这里的参数中字符串argv[]不是指针变量:

int main(int argc, string argv[])
{

   string str = argv[1];
   printf("%s\n",str);

}

如果我使用 char 我必须使用指针:

int main(int argc, char* argv[])
{

   string str = argv[1];
   printf("%s\n",str);

}

【问题讨论】:

    标签: string char command-line-arguments argv argc


    【解决方案1】:

    我发现了 char* argv[] 的含义和 string argv[] 的含义。两者意思相同。

    为了说明原因,让我们看看下面的例子:

      string S = "Hi!"
    

    在使用字符串时,后台到底发生了什么?

    比如说:

     char* S = "Hi!";
    

    这里我们创建一个指针变量 S 来存储一个字符的地址。 “你好!”存储在我们不知道的内存中的某个地方。 “嗨!”的第一个字符的地址存储在 S 中(这与说变量 S 指向 H 相同)。简单来说,S 是存储一个地址(字符“H”的地址)。因此,我们可以逐个访问所有元素,直到找到'/0',因为我们知道字符串在找到'/0'时结束

    如果我把所有的细节抽象出来,上面的代码也可以写成:

    string S = "Hi!" 
    

    相当于说 char* S = "Hi!"

    如果我想访问每个字符怎么办:

    printf("%c", *(S));    // dereferencing the first character which is H
    printf("%c", *(S+1));  // dereferencing the second character which is i
    printf("%c", *(S+2));  // dereferencing the third character which is !
    

    如果我要访问字符串中的每个字符,那么我会说:

    printf("%c", S[0]);
    printf("%c", S[1]);
    printf("%c", S[2]);
    

    这两种方法都做同样的事情。后者比前者更具可读性,这也是它被广泛使用的原因。

    所以我们可以得出结论 char* S 与字符串 S 相同。因为当我们使用字符串时,在后台,它使用 char 指针来访问存储在内存中的字符串的每个元素。 他们都做同样的事情。使用 String 抽象出所有细节。

    这解决了我对为什么 char argv[] 与字符串 argv[] 相同的疑问。 String argv[] 与 char argv[] 做同样的事情,但它隐藏了实现并使其更易于阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 2011-07-08
      • 2011-01-02
      • 2015-12-21
      • 2015-01-28
      • 2018-08-12
      • 1970-01-01
      相关资源
      最近更新 更多