c语言 - 评估 p &&*p++



我正在阅读此内容,可以推断为

的简短形式
if (p) { 
 *p++;
}

,但不太了解其背后的逻辑。

我的理解是如果p是错误的,那么运算符在0中导致0,但是如果p是其他值,则可以评估 *p ,是第二部分,在指向p的地址中取消了该值,并将其递增为1?

编辑:进一步注意,据说可以防止null指针访问null指针= 0x00000000。

我正在阅读此内容,可以推断为简短的形式
if (p) {
  *p++;
}

这更短的形式

if ( !p )            // if p is NULL, *p++ is not evaluated at all,
{                    // p && *p++ evaluates to 0
  return 0;
}
else                 // if p is not NULL, *p++ is evaluated
{                    // p && *p++ evaluates to 1 if *p is not 0
  int x = 0;         // p is advanced regardless of value of *p
  if ( *p )          
    x = 1;           
  p++;
  return x;
}

记住,操作员&&是懒惰的:一旦看到一个参数是错误的,就不会评估其他参数。因此,线

p && *p++

首先检查p是否为非NULL。如果是这样,它将评估下一个操作数:*p++,并检查它是否不等于零。但这是事实:如果p为TRUE,则根据定义,*p++将被执行。

它可能有助于添加这些!= NULL!= 0 Parts

p != NULL && *p++ != 0

但是,不建议使用这种代码。很难阅读。

关闭。如果p!= 0(因此被认为是有效的(,则该块是运行的。在块中,指针p被删除(从内存中获取值(,该值被扔掉,P会被宣布指向的任何P的大小增加。

(*p( 会增加p指向。

相关内容

  • 没有找到相关文章

最新更新