关于c中结构体
来源:互联网 发布:网络选出十大民谣歌手 编辑:程序博客网 时间:2024/05/12 07:12
一、结构体(一般类型)
1.结构体类型定义的一般形式为:
struct 结构体名
{
数据类型 成员1;
数据类型 成员2; //结构成员可以是任意的基本数据类型,也可以是数组、指针类型的变量、结构体变量。
数据类型 成员3;
}; //最后的;不能少
例:
struct data
{
int year;
int month ;
int day;
};
struct student
{
long num;
char sex;
char name[10];
struct data birthday;
float score;
};
1.结构体变量的说明
1.1先定义结构体类型,再说明结构体变量
struct student
{
int num;
char name[10];
char sex;
float score;
};
struct student stu1,stu2;
1.2.在定义结构体的同时定义结构体变量
struct 结构体名
{
数据类型 成员 1;
数据类型 成员 2;
……
数据类型 成员 n;
}结构体变量名列表;
struct student
{
int num;
char name[10];
char sex;
float score;
}stu1,stu2;
1.3.如何使用结构体的成员变量
1 #include <stdio.h> 2 struct student 3 { 4 long int num; 5 char name[20]; 6 char sex; 7 char addr[30]; 8 }a = {89031, "Li Lin", 'M', "123 Beijing Road"}; //定义了结构体变量,并给予赋值 9 void main()10 {11 printf("NO. : %d\nname: %s\nsex: %c\naddress: %s\n", a.num, a.name, a.sex, a.addr) //输出结构体成员的值12 }
注意:一个结构体变量不能作为一个整体输入/出,必须要分别输入/出单个成员变量
1.4.结构体数组
struct student
{
int mum;
char name[20];
char sex;
int ag;
float score;
char addr[30];
}stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};
1.5实例
1 #include <stdio.h> 2 #include <string.h> 3 #include <stlib.h> 4 5 struct person 6 { 7 char name[20]; 8 int count; 9 }leader[3] = {{"Li", 0},10 {"Zhang", 0},11 {"Fun", 0}};12 13 void main()14 {15 int i, j;16 char leader_name[20];17 for(i = 1; i<= 10;i++)18 {19 scanf("%s", leader_name);20 for(j=0;j<3;j++)21 if(strcmp(leader_name, leader[j].name) == 0)22 leader[j].count ++;23 }24 printf("\n");25 for(i=0;i<3;i++)26 printf("%5s: %d\n", leader[i].name, leader[i].count);27 system("pause");28 }
二、typedef struct 类型结构体
2.1.利用重命名类型(typedef)说明结构体
typedef:C语言中允许用户自己定义类型说明符,即利用类型定义符typedef为数据类型取别名
一般形式:
typedef 一定义的类型标识符新标识符;
作用:利用新的标识符代替原来一定义的标识符
例:
typedef int DataType;
第一种 上面第二种用法前面直接加typedef //以下转载
typedef struct student{
char name[20];
int age;
char class;
}student_1;
这语句实际上完成两个操作:
1) 定义一个新的结构类型
struct student{
char name[20];
int age;
char class;
};
2) typedef为这个新的结构起了一个名字,叫student_1。
typedef struct student student_1; (对比typedef int student_1来进行理解)
因此,student_1实际上相当于struct student,这样定义一个变量的时候,既可以用struct student aaa,也可以用student_1 aaa。student_1成了一个数据类型。
如果有逗号,比如
typedef struct student{
char name[20];
int age;
char class;
}student_1,student_2;
可以先理解成
struct student{
char name[20];
int age;
char class;
}student_1;
和
struct student{
char name[20];
int age;
char class;
}student_2;
这样再加上typedef,同上分析,也就是说struct student有两个别名,分别是student_1和student_2,都可以代替struct student定义变量。也就是说有三种用法,struct student aaa;student_1 aaa;student_2 aaa都是等价的。
第二种 上面第三种用法前面直接加typedef
typedef struct {
char name[20];
int age;
char class;
}student_1;
根据唯一性,即定义变量的时候只能是student_1 ;
注意:下面的3种表示形式是等价的
1.结构体变量.成员名
2.(*p).成员名
3.p->成员名 //->指向运算符
附:->是指向运算符
p -> n 得到 p 指向的结构体变量中的成员 n 的值
p -> n ++ 得到 p 指向的结构体变量中的成员 n 的值,用完值后使它加1
++p -> n 得到 p 指向的结构体变量中的成员 n 的值使之加 1 (先加)
三、动态链表所需的函数
(1)分配内存空间函数malloc
函数原型
void * malloc(unsigned int size);
功能:在内存的动态存储区中分配一块长度为size个字节的连续区域,函数的返回值为该区域的起始地址指针。若分配不成功返回NULL.
调用形式:
(<类型说明符>*)malloc (size)
(2)释放内存空间函数free
函数原型:
void free(void * block);
功能:释放block所指向的一块内存空间,block是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc函数多分配的区域。
调用形式:
free(p);//p是指向被释放区域的指针
注意:使用这两个函数需要引用两个头文件stdio.h和alloc.h.
- 关于c中结构体
- 关于c中结构体的写法
- 关于C中结构体的大小问题(sizeof)
- 关于C中结构体存储的简介
- 关于C语言中结构体字节对齐问题
- 关于C语言中定义结构体问题
- C-关于结构体中字符数组的单个赋值
- C语言中关于结构体大小的问题
- C语言:字符串、结构体中关于数组的几个问题
- C语言中关于数组和结构体
- 关于C/C++数据结构中结构体的定义
- 关于C语言中结构体对齐问题
- 关于C结构中占位符
- c 中结构体对齐
- c 语言中结构体
- C语言中结构体
- 转贴:关于C结构体bit field
- 关于C语言中的结构体对齐
- js中&(与)、|(或)以及^(异或)的二进制使用(计算)
- Linux编程中fork()函数返回两次的探究
- Android高级控件之RecyclerView上放置CheckBox
- 【HDU 4324 Triangle LOVE】 + 拓扑排序
- 学习Android Architecture Blueprints(一)-mvp分支
- 关于c中结构体
- Problem 5 Smallest multiple(LCM)
- App项目实战之路(五):服务端篇
- asp.net框架技术第一天
- AndroidStudio 依赖 ButterKnife 出现的空指针异常
- ubuntu配置IDEA
- CodeForces 586D Phillip and Trains (基础搜索 -- DFS)
- eclipse使用
- pl/sql developer导入、出表结构和数据