t3->next=t1?t1:t2;c语言什么意思
如题主所说,t1、t2、t3都是链表的指针,所以表达式“t3->next=t1?t1:t2;”的作用是为链表指针t3的next元素赋值。只不过,在赋值时使用“ ? : ”进行了判断。根据C语言运算符结核性的优先级,具体过程如下:① 取得t3结构体的next元素:t3->next。 ② 进行“ ? : ”条件运算:t1?t1:t2。也就是说,要判断( NULL != t1 )。如果( NULL != t1 ),则条件运算表达式结果取值t1;如果( NULL == t1 ),则表达式取值为t2。 为什么要判断( NULL != t1 )?很简单啊,t1不是指针吗?如果t1为“真”,则取值不...全部
如题主所说,t1、t2、t3都是链表的指针,所以表达式“t3->next=t1?t1:t2;”的作用是为链表指针t3的next元素赋值。只不过,在赋值时使用“ ? : ”进行了判断。根据C语言运算符结核性的优先级,具体过程如下:① 取得t3结构体的next元素:t3->next。
② 进行“ ? : ”条件运算:t1?t1:t2。也就是说,要判断( NULL != t1 )。如果( NULL != t1 ),则条件运算表达式结果取值t1;如果( NULL == t1 ),则表达式取值为t2。
为什么要判断( NULL != t1 )?很简单啊,t1不是指针吗?如果t1为“真”,则取值不能等于0,对吧?而NULL是包含在stddef。h中的宏:#define NULL (void *)0所以,“t1?t1:t2”表达式中“?”之前的第一个表达式"t1"就成了(NULL != t1)。
③ 赋值符号“=”作用,将条件表达式的运算结果赋值给t3->next。刚刚查询了一下stddef。h,关于NULL的宏定义是:#define NULL ((void *)0)上面的描述中书写有误。收起