C语言基础——结构体
来源:互联网 发布:网络销售门票协议书 编辑:程序博客网 时间:2024/05/24 00:09
1.结构体
在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。 它相当于其它高级语言中的记录。“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。
2.定义和使用结构体变量
声明一个结构体类型的一般形式为:
Struct 结构体名
{成员列表};
花括号里是该结构体所以包含的子项,称为结构体的成员,对各成员都应进行类型声明。即
类型名 成员名;
定义一个结构的一般形式为:
struct 结构名
{成员表列};
成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。
成员名的命名应符合标识符的书写规定。例如:
struct Student { int num; char name[20]; char sex; float score; };
在这个结构定义中,结构名为stu,该结构由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符数组;第三个成员为sex,字符变量;第四个成员为score,实型变量。应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。凡说明为结构Student的变量都由上述4个成员组成。由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。
定义结构体类型变量
1.先声明结构体类型,再定义该类型的变量。
例如,
struct Student student 1 ,student 2;
这种形式和定义其他类型的变量形式是相似的。在定义了结构体变量之后磨系统会为之分配内存单元。
2.在声明类型的同时定义变量。
例如,
struct Student { int num; char name[20]; char sex; int age; float score; char addr[30]; }
它的作用与第一种方法相同,但是在定义structStudent 类型的同时定义两个struct Student 类型的变量。这种定义方法的一般形式为
struct 结构体名
{
成员列表
}变量名列表;
3.不指定类型名而直接定义结构体类型变量,其一般形式为
struct
{
成员列表
}变量名列表;
指定了一个无名的结构体类型。
1. 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2.定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
// 从这行开始,一直到文件结尾,都是有效(跟全局变量一样)struct Date{ int year; int month; int day;};int a;void test2(){ struct Date { int year; }; // 这里使用的是test2函数内部的struct Date类型 struct Date d1 = {2011}; // 结构体类型也是有作用域,从定义类型的那一行开始,一直到代码块结束 struct Person { int age; }; struct Person p; a = 10;}int main(){ struct Date d1 = {2009, 8, 9}; test2(); // 不能使用test2函数中定义的类型 // struct Person p2; return 0;}// 定义结构体变量void test(){ // 定义结构体变量的第3种方式 struct { int age; char *name; } stu; struct { int age; char *name; } stu2;
3.结构体变量的初始化和引用
在定义结构体变量时,可以对它初始化。例如,
#include <stdio.h> int main() { struct Student { long int num; char name[20]; int age; char sex; } a= {10101,”liiming”,10,’M’};printf(“num:%ld,name:%s,age:%d,sex:%c”,a.num,a.name,a.age,a.sex);return 0;
注意;
1.在定义结构体变量是可以对他的成员初始化。
2.可以引用结构体变量中成员的值。
3.如果成员本身又属于一个结构体类型,则要用若干个成员运算符。只能对最低级的成员进行赋值或存取以及计算。
4.对结构体变量的成员可以像普通变量一样进行运算。
5.同类的结构体变量可以相互赋值。
6.可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
4.指向结构体的指针
struct Student *p;
2.利用指针访问结构体的成员
1> (*p).成员名称
2> p->成员名称
#include <stdio.h>int main(){ struct Student { int no; int age; }; // 结构体变量 struct Student stu = {1, 20}; // 指针变量p将来指向struct Student类型的数据 struct Student *p; // 指针变量p指向了stu变量 p = &stu; p->age = 30; // 第一种方式 printf("age=%d, no=%d\n", stu.age, stu.no); // 第二种方式 printf("age=%d, no=%d\n", (*p).age, (*p).no); // 第三种方式 printf("age=%d, no=%d\n", p->age, p->no); return 0;}
- C语言基础——结构体
- C语言基础—结构体
- C语言基础——选择结构
- C语言基础——循环结构
- C语言基础——判断结构
- 黑马程序员——C语言基础之结构体
- 黑马程序员——C语言基础---结构体1
- 黑马程序员——C语言基础---结构体2
- 黑马程序员——c语言基础之结构体
- 黑马程序员——C语言基础---结构体
- 黑马程序员——C语言基础---结构体、枚举
- C语言基础复习——结构体(1)
- c语言基础3—变量、结构体、枚举
- c语言基础-结构体
- C语言基础:结构体
- C语言基础-结构体
- 黑马程序员——C语言基础——结构体以及结构体指针实战
- C语言基础结构
- LayoutInflater作用及使用
- LVS+keepalived搭建负载均衡学习手札(二)
- JsonParser
- Json与XML
- Android Studio的安装启动问题
- C语言基础——结构体
- How to Delete controller ExtJS? extjs多个app时,删除其他app的controller
- UIButton总结
- 巴菲特致股东的一封信:2010年
- 日志
- 替柴静说几句话--针对那些不做事的愤青
- 巴菲特致股东的一封信:2009年
- JavaScript(复习版一)
- [LeetCode]90.Subsets II