[C学习]结构体
来源:互联网 发布:软件漏洞挖掘教程 编辑:程序博客网 时间:2024/05/20 05:22
基本类型:如int ,float...
构造类型:如数组,结构体...
应用环境:有时将不同类型的数据组合成一个有机的整体,以便于引用.数据是相互联系的,要反应它们的联系就不能分开处理.
形式:struct 结构体类型名//不是变量名,类似于int ,float..
{};//要加上分号,
不带变量的结构说明不占内存空间,结构类型集中放在一个文件中,需要时#include
定义的3种形式:
1>先声明结构体,再定义变量名
如 struct student//相当于一个整体,
{
int num;
char name[20];
};
struct student stu1,stu2;//不但声明变量是一个结构体,而且是一个定义的student的特殊结构体.
2>声明同时定义变量
如:struct student
{
int num;
char name[20];
}student1,student2;//直接写到分号里.
3>直接定义结构体变量
如: struct //此外无类型名称
{
int num;
char name[20];
}student;//缺点.只能在这里定义这个类型的变量,没有类型名,不能在别地再定义变量.
2>结构体的引用
结构体变量名.成员名
"."是成员运算符,优先级最高,自左向右结合.
可以引用结构体成员的地址,也可引用结构体的地址,结构体变量名,代表这个结构体的第一个成员的地址.
3>结构体数组
数组中存放的元素都是结构体.
定义:
如: struct student
{
int num;
char name[20];
};
struct student stu[3];//定义一个数组stu,它有3个元素,每个元素都是struct student类型.
4>指向结构体类型的指针
结构体变量的指针就是这个变量所占内存的起始地址.可用一个指针变量来指向结构体变量,该指针的值就是这个结构体变量的起始地址.指针也可以用来指向结构体数组.
struct student stud_1;
struct student stu[3];
struct student *p;//指向这个结构体类型的指针
p=&stud_1;
如果用指针来访问stud_1.num;
(*p).num//一定要加上(),因为"."的优先级高于*,p会先与.结合,无意义.
新定义的一个运算符."->"
将(*p).num改写为p->num,其中"->"表示结构体指针要取的成员,称为指向运算符.
结构体变量名.成员名;
(*p).成员名;
p->成员名;
比较如下:
p->n 取出p所指结构体中成员名为n的值
p->n++ 取出p所指结构体中成员名为n的值,再++
++p->n 取出p所指结构体中成员名为n的值,先加1,再使用
////////////////////////////////////////////////
指向结体体数组的指针
p=stu;stu是struct student stu[3];
(++p)->num 取下一个结构体变量的成员num
(p++)->num 取当前结构体变量的成员num,然后p再指向下一个结构体变量.
注意:定义p是一个指向struct student类型数据的指针变量.它用来指向一个struct student结构的变量,它指向如stu[0],stu[1]的起始地址,它不能指向这个结构中的成员.
如p=stu[0].num;(为什么不是p=&stu[0].num??) 编译将提示类型不匹配,如果要将某一成员地址赋给p,可用强制类型转换.先将成员地址换成p的类型.如p=(struct student *) stu[0].num;此时p的值是stu[0]中num的起始地址,printf("%d",*p)输出的是stu[0]中num的值,但是p仍然是原来的类型,即p+1;p会偏移一个结构体的长度.
结构体作参数,是值传递,将结构体变量所在的内存单元的值顺序传递给形参,形参也必须是同类型的结构体.这样系统的开销大.
而用指向结构体变量的指针作参数,传递的是地址.
结构体用来处理链表.
///////////////////////////////////////////////////////////
结构体的应用
结构体与函数
a>结构体用作函数的参数
结构体作函数的形参,接受实参的结构体顺序传来的值.会建立一个临时的结构体,这样会系统带来很大的开销.
b>函数的返回值是结构体
如用结构体作为参数,它是形参,值的修改对实参不起作用.如果要保留这个修改过后的结构体,那么可将它作为返回值保存下来.
也可用于新申请一个结构体空间,然后返回它.
c>函数的返回值是指向结构体的指针
用于新申请一个结构体,返回它的指向结构体起始地址的指针.
struct student
{
long num;
char name[20];
};
struct student* new()
{
struct student *aux;
aux=(struct student*)malloc(sizeof(struct student));
if(aux==null)exit;
else return aux;
}//其中aux就是一个指向结构体类型的指针,可通过这个指针对这个新申请的空间进行操作.
- [C学习]结构体
- Object-C 结构体学习
- C结构体struct学习
- 学习C语言结构体
- C语言-结构体学习
- C语言学习-结构体
- c/c++学习------>结构体
- C语言深入学习--checklist3:结构体
- C语言学习笔记(20结构体)
- C语言学习笔记(21结构体)
- C语言结构体 基础学习
- C语言结构体的学习
- C语言学习第三天结构体
- c语言结构体的学习
- C语言学习之结构体
- 18.从零开始学习C语言--结构体
- C语言学习——结构体
- C语言学习(7)---结构体
- 章毅明论文:基于ASP.NET技术的精馏塔设计组件的开发
- 在CSDN上解决的第一个问题
- XP开启FSO
- sichost.exe,winxphelp.exe,360up.exe,RavNT.exe,Counter.exe,login.jpg.exe等3
- xp上iis5发布asp站点,访问时出现内部服务器错误
- [C学习]结构体
- rand()和srand()产生为随机数的方法
- 无状态EJB
- 开始使用Flex Mate 框架
- 同事给我发的邮件,谈及上周参加项目会议,关于项目Delay的深刻体会(挖掘篇)。
- 错误:constructors not allowed a return type
- 探索AJAX中的消息传输模式(一)
- 探索AJAX中的消息传输模式(二)
- 只要你的网速度保证在50K左右,便可以0..06元/分钟地打长途电话了.