为什么把这个又扯出来呢?
学习链表相关知识时遇到一些问题
回头记忆一下。
逻辑运算符
!(逻辑非)
&&(逻辑与)
|| (逻辑或)
c语言将逻辑运算符两侧的表达式当成“条件表达式”。
将条表的结果按两种情况对待:0为假,非0为真。
短路运算
短路运算为了防止非法内存访问而使用。
短路运算仅仅发生在逻辑运算表达式中,且仅发生在&&和||运算中。
&&与运算优先级高于||或运算。
规则
若在&&左侧出现0(假)或者在||左侧出现非0(真),则&&和||右侧表达式被忽略无视。
练习下
#include<stdio.h>
int main()
{
int i;
int j = 2;
int k;
i = 1;
k = i-- || ++j;
printf("%d %d %d\n",i,j,k);//0 2 1
i = 0;
//i=0,k=0; i=1 j=2
k = i++ && ++i && ++j;
printf("%d %d %d\n",i,j,k);//i=1,k=0,j=2
i = 1;
k = i-- || ++j && ++i;
//k = 1 || (++j && ++i);
//k = 1 || A (A被短路)
printf("%d %d %d\n",i,j,k);//i=0,j=2,k=1
i = 1;
//k=1 || (++j || ++i);
k = i-- || ++j || ++i;
printf("%d %d %d\n",i,j,k);//i=0,j=2,k=1
i = 0;
//k=(i++ && ++j) || ++i;
//k=(0 && ++j) ||++i; i=1
//k=1,j=2,i=2
k = i++ && ++j || ++i;
printf("%d %d %d\n",i,j,k);//i=2,j=2,k=2
i = 1;
k = i-- || ++i && ++j;
//k=i-- || (++i && ++j);
//k=i-- || (i=2,j=2);
//k= 1,i=0,j=2
printf("%d %d %d\n",i,j,k);//i=0,j=2,k=1
return 0;
}
好几链表的话以后提及
现在简单的说一点点链表准备工作
(虽然写的这个东西有一点点只可意会不可言传的感觉…)
要求:表示屏幕上点信息,行、列坐标构成
typedef struct POINT{
int row;
int col;
struct POINT *next;
}POINT
POINT a,b,c,*p;
a.row = 1; a.col = 4;
b.row = 5; b.col = 6;
c.row = 7; c.col = 8;
特别的,a.next->row 其值等价于b.row
a的next成员所指向的实例的row成员
如果上面定义p=&a;
p->row的值即为1
p = p->next;
类似于这种语句的多次执行,可以实现将p指针的指向在整个“链条”的各个节点上依次“滑动”,可以以此实现对此链表中的每一个节点的访问(遍历)
如果这是一个空链,a的值为0;
for(p = 头结点首地址; p-> next != NULL; p = p->next)
上述用不了了,直接跳出循环
for(p = 头结点首地址; p&& p-> next != NULL; p = p->next)
继续进行。
好吧。就这样。