C 中 char* argv[] 和 string argv[] 的区别

Difference between char* argv[] and string argv[] in C

有什么区别:

  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);

}

我发现了 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[] 与 string argv[] 相同的疑问。 String argv[] 与 char argv[] 的作用相同,但它隐藏了实现并使其更易于阅读。