char var[10];
char *pointer = &var;
while(*pointer!='\0'){
//Something To loop
}
可以转化为以下内容:
//While Loop Part:
while(*pointer){
//Something to Loop
}
因此,我的问题是,*pointer 是什么意思?它涉及到 IT 技术方面。
while(x) {
do_something();
}
只要x
为真,就会重复运行do_something()
。在C语言中,“真”意味着“非零”。
'\0'
是空字符。从数值上看,它是零(表示'\0'
的位与数字零相同;正如空格是0x20 = 32一样)。
所以你有while(*pointer != '\0')
。只要被指向的内存不是零字节,就会循环执行。前面我说过“真”意味着“非零”,因此比较x != 0
(如果x
是int
、short
等)或x != '\0'
(如果x
是char
)与if、while等中的x
本质上是相同的。
你应该使用这种更短的形式吗?我的意见是否定的。对于阅读代码的人来说,这使得意图不太清晰。如果你明确写出比较,即使它们在编译器上实际上意义相同,也会使循环的意图变得更加明显。
因此,如果你写 while(x)
,那么x
应该是一个布尔类型或代表布尔类型的C int(真或假概念)。如果你写while(x != 0)
,那么你关心x
是一个非零整数,并且正在进行一些数字处理。如果你写while(x != '\0')
,那么x
是一个char
,你希望继续执行,直到找到一个空字符(你可能正在处理一个C字符串)。
让我们从一个简单的例子开始:
int a = 2 ;
int *b = &a ;
/* Run the loop till *b i.e., 2 != 0
Now, you know that, the loop will run twice
and then the condition will become false
*/
while( *b != 0 )
{
*b-- ;
}
char*
,即字符串。char var[10] ;
/* copy some string of max char count = 9,
and append the end of string with a '\0' char.*/
char *pointer = &var ;
while( *pointer != '\0' )
{
// do something
// Increment the pointer 1 or some other valid value
}
*pointer
遇到'\0'
。while( *pointer )
/* The above statement means the same as while( *pointer != '\0' ),
because, null char ('\0') = decimal value, numeric zero, 0*/
但是当你使用 while(*pointer != 'x')
时,用法就会改变,其中 x 可以是任何字符。在这种情况下,你的第一段代码将在 *pointer 到达 'x' 字符
后退出,而你的第二段代码将一直运行,直到 *pointer 到达 '\0' 字符
。
*pointer
的意思是解引用指向 pointer
所指位置的值。当 pointer
指向一个字符串并在 while
循环中使用,如 while(*pointer)
,它等同于 while(*pointer != '\0')
:循环直到找到空终止符。
是的,你可以去做。
请注意,*pointer
是指向内存位置的值,该位置由 pointer
指向(或保存其地址)。
现在,你的 *pointer
指向字符数组 var
的各个字符。
因此,while(*pointer)
是等效用法的速记形式
while(*pointer!='\0').
假设你的字符串初始化为9个字符,比如"123456789",并位于一个地址(内存位置)addr
。
现在,因为以下语句:
char *pointer=&var;
指针
将指向字符串“1234567890”的第一个元素。
当您编写*pointer
时,它将检索存储在内存位置addr
中的值,该值为1
。
现在,这个语句:
while(*pointer)
将等同于
while(49)
因为数字 1
的 ASCII 值为 49,且条件被评估为 true。
这将继续进行,直到增加 pointer
九次后达到 \0
字符。
现在,该语句为:
while(*pointer)
将等同于
while(0)
因为\0
的ASCII值是0
。因此,条件被评估为false并且循环停止。
摘要:
在 while(condition)
中,condition
必须为非零才能继续执行循环。如果 condition
评估为 zero
,则循环停止执行。
while(*pointer)
将一直工作,直到指向的内存位置的值为 non-zero
ASCII 值。
此外,您还可以使用:
if(*ptr){ //而不是 if(*ptr!='\0')
//做某事
}
if(!*ptr){ //而不是 if(*ptr=='\0')
//做某事
}
*pointer
的意思就是字面上的意思:“给我指针所指向的位置存储的值”。或者简称为“解引用 pointer
”。在你具体的例子中,解引用指针会产生字符串中的一个字符。
while(*pointer)
也是字面上的意思:“只要表达式 *pointer
返回真值,就执行循环体”。
由于 C 将所有非零值视为真值,在条件语句中使用 *pointer
总是等价于使用表达式 *pointer != 0
。因此,许多 C 程序员省略了 != 0
部分,以练习布尔禅。
*pointer
指向字符串变量var
的第一个字符;当第一个字符为0(数值上而言,不是字符'0'),则退出循环。 - gengisdave