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[] 的作用相同,但它隐藏了实现并使其更易于阅读。
有什么区别:
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[] 的作用相同,但它隐藏了实现并使其更易于阅读。