使用字符指针测试条件

Testing conditions using Character pointers

本文关键字:测试 条件 指针 字符      更新时间:2023-10-16
int main()
{
  char *p,c;
  for(p="Hello World";c=*p;++p)
  {
    printf("%c",c);
  }
}

在上面的代码中,我知道++p将使指针"p"指向"Hello World"中的下一个字符。而且我也知道没有对 C 或 C++ 中的数组执行边界检查。该程序的输出是"Hello World"。如何使用

c=*p;

"c=*p"返回什么。据我所知,当"++p"到达"hello world"的末尾时,指针"p"应该指向一些垃圾值,循环应该打印一些垃圾值。

c=*p;

返回任何内容,它是一个表达式。for循环在赋值后计算c的值。

当"++P"到达"hello world"的末尾时,指针"p"应指向某个垃圾值

没有。在到达末尾之前,它到达空终止字符 - '' 。这是0.分配给c并评估中断条件以false 。因此,循环在出界之前就结束了。

C 字符串根据定义以 NULL 字符

结尾 '' ,如果它是一个字符串,那么它必须以 NULL 结尾。 因此,当字符串结束时,c = *p将指向一个 NULL 字符,在您的情况下,这是 'd' 的下一个字符。ASCII 表中的 NULL 字符有一个整数值 0,该值的计算结果为 false 并退出for循环。

请注意,如果 C 字符串不以 NULL 字符结尾(那么起初它不是 C 字符串),那么基本上无法检测到它是一个字符串,因为它将被存储为字节序列。在这种情况下,它将只是一个字节数组或字符串,这取决于我们如何解释。

也不是说c = *p返回任何内容,它是一个表达式,它被计算e = *p 将当前值所指向的值p转移到 var c,其值是表达式的最终计算。

字符串以空字符(又名 )结尾,因此在末尾p应指向终止字符串的空字符,因此c将被这被认为是一个假条件。