电阻有限流的,有分压的,有上拉的,电容是滤波的
char *p=NULL, *p2=NULL;
对应了printf("-1-
的打印(p2=p=buf, printf("-2- p=%p\t-p2=%p\n", p, p2), p2=NULL)
,这里根据优先级会先计算()
表达式,而这里最外层只有一个()
,所以不用多个考虑()
的结合性,拆解()
里的内容,为一个,
号运算符,我们可以直接断定()
的最终结果为最右边的表达式值p2=NULL
,p2=NULL
是一个=
号表达式,根据=
号表达式,会从右至左结合,所以整个=
号表达式的值为左值,也就是p2
,从这里我们就已经可以得到最外层()
表达式的值一定是p2
的值,也就是NULL
,这也推导出了(p)=(nil)
的打印结果(p2=p=buf, printf("-2- p=%p\t-p2=%p\n", p, p2), p2=NULL)
,根据,
号运算符的结合性,会从左至右结合,即会先执行p2=p=buf
,再执行printf("-2- p=%p\t-p2=%p\n", p, p2)
,最后执行p2=NULL
,这里的p2=p=buf
表达式出现了两个=
,根据=
号从右至左的结合性,会先执行p=buf
,再执行p2=p
,所以最终是p2
,p
,buf
的值相等。所以第二个执行printf("-2- p=%p\t-p2=%p\n", p, p2)
时可以看到执行结果是相等的,当最后执行p2=NULL
时,p2
变成了NULL
,所以这行语句执行完毕后p为buf
,p2为NULL
,这就是printf("-3-
的打印结果p = (NULL, buf);
,p2 = NULL, buf;
这两个结果不同在于,
号运算符的优先级低于=
号运算符,所以p = (NULL, buf);
的p
得到的是()
运算符的值,即,
的最右表达式的值,而p2 = NULL, buf;
的p2
得到的是=
号表达式的值,即NULL
,这就是printf("-4-
的打印结果