我刚刚在参考书中遇到了这个循环,但我不确定比较中发生了什么,因为它只是一个单独的指针。C++:像这样的for循环如何工作(使用指针)?
char input[300], *p, *q[300], **r = q;
cin.getline(input, 300);
for (p = input; *p; p++)
它将如何工作?
我刚刚在参考书中遇到了这个循环,但我不确定比较中发生了什么,因为它只是一个单独的指针。C++:像这样的for循环如何工作(使用指针)?
char input[300], *p, *q[300], **r = q;
cin.getline(input, 300);
for (p = input; *p; p++)
它将如何工作?
for语句中的第二个表达式针对“真实性”进行评估。
for (p = input; *p != 0; p++)
由于字符串是空终止,这是怎样一个遍历字符串中的字符,如果不等于0的for循环,可以更改为以下相当于一个字符是真实的停在最后。
@self这是原来的问题... – MikeCAT
input
是一个以空字符结尾的字符串。 cin.getline
将在读取字符串的最后一个字符之后放置0
,如果该行超过299个字符,则在input[299]
之后放置0
。
char值被隐式转换为布尔值。如果它不为零,则它变为真,如果它为零,则为假。因此,环路条件相当于*p != 0
。
因此,循环将遍历数组,直到遇到零字符串的末尾。
它实际上将ASCII'\ 0'放在它后面,我不确定零是相同的。 –
@自己的空字符实际上是零。抛开语义原因,这也允许更快的迭代,因为与零比较通常比比较两个任意数字更快。 –
这与'* p!= 0'相同。 – jtbandes
Bang-head击中表 - 比较在哪里? –