c语言 构造类,C语言之构造类型
一、结构体类型
1、构造结构体类型
struct 结构体类型名
{成员1的定义;
成员2的定义;
成员n的定义;
};
例如:
struct student
{int sn;
int age;
char sex;
int s[3];
};
注:
(1)定义成员的方式与定义普通变量的方式一样。
(2)成员列表必须用一对花括号括起。
(3)结构体名可以省略。
2、定义结构体变量
三种格式
A.先定义(构造)结构体类型名再定义结构体变量
例如:
main()
{
struct student//类型名
{int sn;
int age;
char sex;
int s[3];
};
/*类型定义*/
struct student stul,stu2,st[25];/*变量定义*/
}
B.在定义结构体类型的同时可以定义结构体变量
例如:
struct student
{int sn;
int agc;
char sex;
int s[3];
}stul,stu2,st[25];
C.类型、变量同时定义,类型名student省略。(一般不用)
例如:
struct
{int sn:
int age;
char scx;
int s[3];
int*p;
}stul,stu2,st[25];
注:(1)结构体变量在内存中占用字节数为各成员占用字节数总和。
例如:
sturct aa
{int num;
char name[10]:
};
struct bb
{int a ;
float b;
struct aa c;
};
struct bb a:计算:sizcof(a)的值是多少?
注意:char数组是每个元素占一个字节
结果:2+10+2+4=18
例:
double a;
double*b;
double c[5];
则:sizcof(a),sizcof(b),sizeof(c)的值分别为:
8 2 40
例:
若有定义语句char*pt[3];则sizcof(pt)的值为:
2*3=6
指针占字节数始终为2字节
3、结构变量的初始化及引用
使用结构体变量、结构体数组、结构体指针变量
(1)在定义结构体变量的同时可以将各成员的初值按顺序放在一对花括号中,来进行对结构体变量的初始化。若初值个数多于成员个数则出错,若初值个数少于成员个数,则多余成员自动赋0。
struct aa
{int a;
char b[10];
float c;
}al={30,"china",40.5},a2={60,"kunming"},a3;
(2)结构体变量不能整体引用,只能引用它的成员。(同数组相似)
引用结构体成员的方式:
结构体变量名.成员名
其中(.)为成员运算符。
如:
printf("al=%d,%s,%f",al);非法
printf("a1=%d,%s,%f",al.a,al.b,al.c);
al.a=80;
al.b="xinjiang";//非法:常量不能放在=左边
al.c=60.5;
注意:“.”是成员运算符,与()[]共同为一级运算符
4、指向结构体数据类型的指针
(1)指向结构体变量的指针
可以用指针变量指向结构变量也可能用指针变量指向结构体变量中的成员。要注意指针变量的类型必须与它所指向变量的类型相同。当指针变量指向结构体变量时,对指针变量加1则跳过整个结构体而不是跳过一个成员。
如:
struct student
{int num;
char name[20];
char sex;
float score;
};
struct student aa={1001,"zhang",'M',80.5};
struct student*p&aa;
char*q=aa.name;
int*r=&aa.num;
看官见笑了
struct student aa{1001."zhang",M,80.5}.
struct student*p=&aa;
char*q=aa.name;
int*r=&aa.num;
当指针变量p指向结构体变量aa时,引用aa中成员的方式有三种:
aa.num
(*p).num
p->num ->指向运算符
aa.score
(*p).score
p->score
(2)指向结构体数组的指针
struct student
{int num;
char name[20];
char sex;
float score;
};
struct student stu[3]={
{1001,"zhang",:M,60.5},
{1002,"peng",VM,100},
{1003,"wang";w,90.9}
};
struct student*p=stu;
见笑了
例题:
访问zhang:
stu[0].name
p->name
(*p).name
访问1002:
stu[1].num
(p+1)->num
(*(p+1)).num
访问w:
stu[2].sex
(p+2)->sex
(*(p+2)).sex
注:
(1)可以用结构体变量的成员作为实参,它与普通变量作为实参的用法是一样的。
(2)用结构体变量作为实参时,要求形参必须是同一结构体类型的变量,传递后形参与实参各对应成员值是一样的。
(3)也可以用结构体类型的地址(指针变量或数组)作为实参,要求形参必须是同一结构体类型的指针变量或数组。只要是地址传递,则可以通过形参来改变实参的值。
二、链表
在C语言之链表中有详细介绍,这里篇幅太长不做赘述
三、共用体类型
在C语言之共用体类型中有详细介绍,这里篇幅太长不做赘述
四、typedef
在C语言之typedef中有详细介绍,这里篇幅太长不做赘述
c语言 构造类,C语言之构造类型相关推荐
- 为什么除了Go语言, 其他类C语言都是垃圾[翻译][转]
2019独角兽企业重金招聘Python工程师标准>>> 英文原文: http://www.syntax-k.de/projekte/go-review 原始翻译: http://ww ...
- 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...
代码区 约瑟夫环:用类C语言实现!!!可以成功运行!!!不是仅仅的算法,而是实实在在的类C #include #include typedef int ElemType; typedef struct ...
- 硬实时系统的语言构造和转换----普渡大学
本文翻译来源于: Language Constructs and Transformation for Hard Real-time Systems ...
- 如何用C#语言构造蜘蛛程序
"蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载We ...
- 用C#语言构造蜘蛛程序
"蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载We ...
- 转:如何用C#语言构造蜘蛛程序
如何用C#语言构造蜘蛛程序 "蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动 ...
- [转载]如何用C#语言构造蜘蛛程序
[转载]如何用C#语言构造蜘蛛程序 出处:未知了.. "蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监 ...
- 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言
用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个60 ...
- 基于Python实现的类Pascal语言的词法分析和语法分析器
类Pascal语言的语法分析器 功能 使用Python实现的类Pascal语言的词法分析和语法分析器. 语法分析实现的功能有: 利用文法推导式构造LR(1)分析表 使用LR(1)分析表对输入的Toke ...
最新文章
- 针对抓win2003系统密码的诡计
- silverlight 类似百度的图片浏览器,视频播放,附件下载功能,全部后台程序。...
- mysql 数据库名称相同吗_mysql 数据库名称相同吗
- 消息中间件核心实体(1)
- 32汇编语言程序说明_Linux 汇编语言学习--编译和链接
- win7分区c盘调整容量_C盘空间不足变红咋办?清理垃圾瘦身不如扩容,硬盘容量调整教程...
- attrib批量显示文件夹_Windows 下彻底隐藏文件和文件夹的方法
- 关于计算机实验的英语作文,关于实验的英语作文
- python怎么重新运行,如何让python程序重新运行其
- 课程管理系统 java
- 修改别人服务器数据库,修改别人服务器数据库
- 目录大全:RDMA、IB卡、IB驱动下载、ubuntu16.04安装 IB驱动、ib_read/write_bw 测试RDMA读写....
- 服务器解压文件出错,四大方法解决解压文件出错问题|解压文件出错
- Ubuntu搭建透明网桥
- ReRes 谷歌浏览器插件使用
- java视、频_[java视频]感人故 事视 频网 站上那找~~~
- Oracle 常见错误总结及问题解决方法
- 火狐浏览器无法启动java_打开火狐浏览器出现错误
- [编程题] 字符迷阵
- springboot + vue 前后端分离 学生选课系统
热门文章
- notes邮件正文显示不全_Outlook邮件中的可操作消息(Actionable Message)
- linux下的几种进程间通信方式的特点
- windows 下conda安装gym
- list删除某个元素_Redis对象——列表(List)
- 1.3.2 专业术语(系列机、兼容、软件可移植性、固件)
- 1.1.3 计算机的分类与发展方向(电子计算机、计算机按指令和数据流分类、计算机发展趋势正向着“两级”分化)
- LwIP 之三 操作系统隔离接口 sys_arch
- pythonselenium设置_selenium 怎样设置请求头?
- python删除为空值的列_python如何删除列为空的行
- MySQL / 基本架构介绍