2016-05-15 77 views
2

我刚刚在参考书中遇到了这个循环,但我不确定比较中发生了什么,因为它只是一个单独的指针。C++:像这样的for循环如何工作(使用指针)?

char input[300], *p, *q[300], **r = q; 
cin.getline(input, 300); 
for (p = input; *p; p++) 

它将如何工作?

+1

这与'* p!= 0'相同。 – jtbandes

+0

Bang-head击中表 - 比较在哪里? –

回答

4

for语句中的第二个表达式针对“真实性”进行评估。

for (p = input; *p != 0; p++) 

由于字符串是空终止,这是怎样一个遍历字符串中的字符,如果不等于0的for循环,可以更改为以下相当于一个字符是真实的停在最后。

+1

@self这是原来的问题... – MikeCAT

5

input是一个以空字符结尾的字符串。 cin.getline将在读取字符串的最后一个字符之后放置0,如果该行超过299个字符,则在input[299]之后放置0

char值被隐式转换为布尔值。如果它不为零,则它变为真,如果它为零,则为假。因此,环路条件相当于*p != 0

因此,循环将遍历数组,直到遇到零字符串的末尾。

+0

它实际上将ASCII'\ 0'放在它后面,我不确定零是相同的。 –

+0

@自己的空字符实际上是零。抛开语义原因,这也允许更快的迭代,因为与零比较通常比比较两个任意数字更快。 –