5、指针与结构体
一个结构体类型的指针是所指结构体变量所占内存的起始地址。
若有:struct student stu,*p;p=stu;
以下三种形式等价: stu.成员名 等价于 (*p).成员名 等价于 p->成员名
6、用指针处理链表
(1) 建立链表的函数:p.297 例11.8
struct student *creat( )
{ struct student *head, *p1, *p2;
int i, len;
len=sizeof(struct student);
for(i=1; i<=N; i++)
{ p1=(struct student *)malloc(len);
printf("Enter num,score:");
scanf("%ld,%f", &p1->num, &p1->score);
if(i==1) head=p2=p1;
else { p2->next=p1; p2=p1; }
if(i==N) p2->next=NULL;
}
return(head); /*返回链表头指针*/
}
(2) 输出链表的函数:p.300 例11.9
void plink(struct student *head) /*更具通用性*/
{ struct student *p;
p=head;
while(p!=NULL)
{ printf("num=%ld, score=%5.2f\n",
p->num, p->score);
p=p->next;
}
return;
}
(3) 对链表的删除操作:p.301 例11.10
struct student *del(struct student *head, long n)
{ struct student *p1, *p2; /*↑n:要删除学号*/
p1=head;
if(p1->num==n) head=p1->next; /*删除首节点*/
else
{ do { p2=p1; p1=p1->next;
}
while(p1!=NULL && p1->num!=n);
if(p1->num==n) p2->next=p1->next; /*找到*/
else printf("Not be found!\n"); /*未找到*/
}
free(p1); /*释放被删除节点的存储区*/
return(head); /*返回头指针*/
}
(4) 对链表的插入操作:p.303 例11.11
第十二章 位运算
1、 按位“与”运算符(&):参与运算的两个数据,按二进制位进行“与”的运算。
2、 按位“或”运算符(|):参与运算的两个数据,按二进制位进行“或”的运算。
3、 按位“异或”运算符(^):参与运算的两个二进制位同号为0(假),异号为1(真)。
4、 “取反”运算符(~):对二进制位按位取反。
相关推荐: