Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符指针如何与while循环一起工作_C_Pointers_Char - Fatal编程技术网

C 字符指针如何与while循环一起工作

C 字符指针如何与while循环一起工作,c,pointers,char,C,Pointers,Char,在while循环中,当提到*s时,它表示s中包含的地址处的值,因此在第一种情况下,该值将为“a” 我的问题是,当循环检查它时,它如何检查字符的ASCII值以检查条件是否为真。是否有其他方法 main() { char str[] = "abcd" ; char *s = str; while(*s) printf ("%c",*s++) ; } 当您声明字符串变量时,如 char str[] = "abcd"; 这就像声明str[5]=“abcd\0” 因此,

在while循环中,当提到
*s
时,它表示
s
中包含的地址处的值,因此在第一种情况下,该值将为“a”

我的问题是,当循环检查它时,它如何检查字符的ASCII值以检查条件是否为真。是否有其他方法

main()
{
   char str[] = "abcd" ;
   char *s = str;
   while(*s)
       printf ("%c",*s++) ;
}

当您声明字符串变量时,如

char str[] = "abcd";
这就像声明
str[5]=“abcd\0”


因此,在while循环中,它首先检查
*s
的值,即“a”,在ascii表中转换为97。然后打印*s指针内的当前值,然后将指针增加1,这将导致下一个字符。当到达
\0
时,循环退出,因为
\0
等于0

当您声明字符串变量时,如

char str[] = "abcd";
这就像声明
str[5]=“abcd\0”

因此,在while循环中,它首先检查
*s
的值,即“a”,在ascii表中转换为97。然后打印*s指针内的当前值,然后将指针增加1,这将导致下一个字符。当到达
\0
时,循环退出,因为
\0
等于0

while(conditon)
在C/C++中,如果
条件!=0

由于它是一个未引用的字符*,这意味着它是一个1字节的值。范围为0-255

由于第一个值是“a”,这意味着它将在255之后将此表从值“a”(61)打印到“nbsp”(255),字符值将溢出到“0”或空字符,此时
(条件)
将计算为false,程序将结束

while(条件)
在C/C++中,如果
条件!=0

由于它是一个未引用的字符*,这意味着它是一个1字节的值。范围为0-255

由于第一个值是“a”,这意味着它将在255之后将此表从值“a”(61)打印到“nbsp”(255),字符值将溢出到“0”或空字符,此时
(条件)
将计算为false,程序将结束


非零值表示为真。字符的值基本上是一个整数。表示字符串结尾(
\0
)的nul字符的值为零。然后循环停止。非零值表示True。字符的值基本上是一个整数。表示字符串结尾(
\0
)的nul字符的值为零。然后循环停止。您的意思是在a的情况下,*s将转换为97,然后进行计算吗?那么在这种情况下,如果我的字符串包含数字0,它会检查0或其ascii 48吗?是的,这就是我的意思。如果您的代码包含类似于
charstr[]=“abc0123”
然后每个数字也将转换为各自的ASCII值,然后进行计算。您的意思是在a的情况下,*s将转换为97,然后进行计算吗?那么在这种情况下,如果我的字符串包含数字0,它会检查0或其ascii 48吗?是的,这就是我的意思。如果您的代码包含类似于
charstr[]=“abc0123”然后每个数字也将转换为各自的ASCII值,然后进行计算。不完全是这样。代码不增加*s的值,只增加s的值。因此,它不是“从61到255”,而是打印字符串,然后结束。而且,该ascii表已经过时。这里有一个更新版本的链接:不完全是。代码不增加*s的值,只增加s的值。因此,它不是“从61到255”,而是打印字符串,然后结束。而且,该ascii表已经过时。以下是指向更新版本的链接: