加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

#C语言#结构

(2017-09-19 16:43:04)
分类: 计算机相关
结构是一个或者多个变量的集合,变量可以使不同类型,为了处理方便而把这些变量组织到一个名字之下。
1.结构的基本知识:struct name { int a;int b;}关键字struct 引入结构声明,结构中定义的变量称之为成员,调用结构中数值采用 结构名.成员 方式 。
2.结构与函数:结构作为一个整体复制和赋值,通过&运算符取地址,访问启成员。如果传递给函数的结构很大,使用指针方式的效率比复制结构要高很多。struct point *pp;pp指向一个point 结构,那么*pp为该结构,(*pp).x,(*pp).y则是结构成员。另外如果是一个指针指向一个结构,则直接使用 pp->x,pp->y来调用对应成员。
3.结构数组:struct key {
char *word;
int count;} keyTab[NKEYS]; 他声明了一个结构类型key, 并定义了该类型的结构数组keyTab,同时为其分配了存储空间。 数组空间可以通过sizeof 来动态改变。sizeof 可以用在#define 中,但是不可以用在#if 中。
4.指向结构的指针:
typedef struct 
char name[21]; 
char city[21]; 
char state[3]; 
} Rec; 
typedef Rec *RecPointer;
RecPointer r; 
r=(RecPointer)malloc(sizeof(Rec));r是一个指向结构体的指针。请注意,因为r是一个指针,所以像其他指针一样占用4个字节的内存。而malloc语句会从堆上分配45字节的内存。*r是一个结构体,像任何其他Rec类型的结构体一样。
5.自引用结构:
struct tnode{
char *word;
int count;
struct tnode *left;
struct tnode *right;
};
struct tnode *left;他将left声明为tnode的指针,而不是tnode实例本身。所以这种声明是合法的。
6.表查找:
(1)按序号查找
链表不是随机存取结构,在链表中,即使知道被访问结点的序号i,也不能像顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域next逐个结点往下搜索,直至搜索到第i个结点为止。因此,链表不是随机存取结构。
(2) 按值查找
从开始结点出发,顺着链逐个将结点的值和给定值key作比较,若有结点的值与key相等,则返回首次找到的其值为key的结点的存储位置;否则返回NULL。
7.类型定义:typedef,C语言使用typedef来建立新的数据类型名称。typedef int Length; Length与int具有相同的声明作用了。typedef声明并没有创建一个新的类型,它只是为了某个已经存在的类型增加了一个新的名称。
8.联合:是可以在不同时刻保存不同类型和长度的对象的变量,编译器负责跟踪对象的长度和对齐要求。union 要足够大,能够保存3种类型中最大的一种,每个变量对于基地址的偏移量都为0.
9.位字段:类似于其他语言中的标志位,struct {unsigned int is_keyword:1;}flag;修改对应flag.is_keyword,;来判断对应属性。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有