在while循环中,提到*s
时,它意味着s
中包含的地址处的值,因此在第一种情况下,该值将为'a',
我的问题是while循环将如何检查它,它会检查字符的ASCII值以检查条件是否为真。是否还有其他方法?
main()
{
char str[] = "abcd" ;
char *s = str;
while(*s)
printf ("%c",*s++) ;
}
答案 0 :(得分:3)
当您声明类似字符串的变量
char str[] = "abcd";
这就像声明str[5] = "abcd\0";
因此,在您的while循环中,它首先检查*s
的值,即'a',该值在ascii表上转换为97。然后,在* s指针内打印当前值,然后将指针加1,这将导致下一个字符。当您到达\0
时,循环将退出,因为\0
等于0;
答案 1 :(得分:1)
Task::join('events', function ($join) {
$join->on('events.task_id', '=', 'tasks.id')
->where('events.event_type', '=', 'Task')
->where('events.task_stage', '!=', 'assigned');
})->select('tasks.*','tasks.id as taskId')->get();
,将执行C / C ++代码中的 while(conditon)
由于它是已取消引用的char *,这意味着它是一个1字节的值。范围是0-255。
由于第一个值为'a',这意味着它将在值255之后将表从值'a'(61)打印到'nbsp'(255),char值将溢出为'0'或NULL字符condition != 0
的计算结果为false,程序将结束。