有关结构体的认识应用


最近把结构体的部分知识又仔细的研究学习了一下,总结了一下内容,希望者篇文章对那些对结构体模糊的人c结构体

1, 结构体是一种自定义的数据类型,也是用来存储多个数据的大容器不过结构体要比数组灵活,它可以存储不同类型的数据

2, 结构体的定义

struct + 结构体名字 {大括号中填写结构体成员,多个结构体成员之间通过分号间隔}

如下:

struct student {

// 结构体成员

char name[20];//存储姓名

char sex;   // 存储性别

int number; //存储学号

int score;  // 存储分数

};// 分号是结构体定义结束的标志,必不可少

3, typedef 类型重定义,即给已有的类型重新起一个名字,新的名字和原类型具有同样的功能;

typedef 第一种格式, 先定义结构体类型,然后再typedef

如:typedef int  integer;

给结构体类型 struct student 重新定义一个名字Stu

typedef struct student Stu;

typedef 第二种格式, 定义结构体的同时,typedef (这种格式比较常用)

typedef struct point1 {

float abscissa; //存储横坐标

float ordinate; //存储纵坐标

}Poi1;

其中Poi1此后可以作为一个数据结构类型应用

如: Poi1 p1 = {};就是定义了一个结构体类型变量p1

4, 结构体变量访问结构体成员的方式,通过结构体变量.结构体成员,

如: printf("number = %d\n",stu.number);

5, 结构体数组:

// 定义一个学生结构体变量

Stu person[4] = {{"Frank",‘f‘,22,10086,87},{"Duck",‘f‘,28,10087,93},{"Xiaoming",‘f‘,27,10088,93},{"Phone",‘f‘,25,10089,75}};

// 运用结构体数组对学生按成绩排序:

for (int i = 0; i < 4; i ++) {

if (person[i].score > scoreMax.score) {

scoreMax = person[i];

}

if (person[i].age < ageMin.age) {

ageMin = person[i];

}

}

6, 结构体内存分配原则

以结构体成员所规定的存储空间最大的空间大小为单位来进行分配,是

最大空间的最小整数倍

7, 结构体可以嵌套, 即在一个结构体中的结构体成员是另一个结构体类型的变量

如:先定义一个日期的结构体Date

typedef struct  birthday

{

int year;

int month;

int day;

}Birth;

则:结构体嵌套, 在一个结构体中的结构体成员是另一个结构体类型的变量

typedef struct stu {

char name[20];   //存储学生姓名

char sex;       //存储学生性别

int age;        // 存储学生年龄

int score;     //存储学生分数

Birth birth;   //出生日期

}Stu;

8,练习:

1), 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。

int days(date dat)

{

int a[12] = {0,31,59,90,120,151,181,212,243,273,304,334};

int day = 0;

BOOL isTrue ; // 用于判断该年是否为闰年

// 判断该年是否为闰年

if (dat.year % 400 == 0 || (dat.year % 4 == 0 && dat.year % 100 != 0)) {

isTrue = 1;  // 如果该年是闰年,令isTrue 为 1

} else {

isTrue = 0;

}

day += a[dat.month - 1] + dat.day;

day += isTrue && dat.month >= 3 ? 1 : 0;

return day;

}

2), 有5名学生保存在结构体数组中,编程按学生的姓名降序排序

void sortName(Stu a[],int n)

{

for (int i = 0; i < n - 1; i ++) {

for (int j = 0; j < n - 1 -i ; j ++) {

if (strcmp(a[j].name, a[j + 1].name ) < 0)  {

Stu temp = a[j]; //temp 为中间变量,用于交换两个结构体元素

a[j] = a[j + 1];

a[j + 1] = temp;

}

}

}

}

有关结构体的认识应用

时间: 2024-10-11 20:21:06

有关结构体的认识应用的相关文章

关于结构体

1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构. typedef struct People { int a; char b; double c; }P: 其中:struct是关键词, People是标签, a b c是成员, P是此结构体声明的变量. 于是在声明变量的时候就可:P p1; 这里的P实际上就是struct People的别名.P==struct People 另外这里也可以不写People(于是也不能struct People p1;了,

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

结构体的大小

系统在存储结构体变量时存在地址对齐问题,编译器在编译程序时会遵循两条原则: 一.结构体变量中成员的偏移量必须是成员大小的整数倍: 二.结构体大小必须是所有成员大小的整数倍. 1 #include<stdio.h> 2 3 struct a{ 4 int i; 5 float f; 6 char c; 7 double d; 8 long l; 9 }b; 10 11 int main(){ 12 printf("%d\n",sizeof(b.i));// 4 13 prin

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom

38-oc常用结构体

常用结构体 在开发中苹果推荐我们使用CG开头的结构体, 也就是说NS开头的结构体一般不用 OC中定义一个点,用什么结构体 NSPoint; CGPoint point = NSMakePoint(10, 20); OC中保存物体尺寸的,用什么结构体 NSSize; CGSize size = NSMakeSize(100, 50); OC中保存某个物体的位置和尺寸,用什么结构体 NSRect; CGRect rect = NSMakeRect(10, 20, 100, 50); NSNumber

结构体在固件库中的应用

上次介绍了一般结构体的定义以及引用方法,那么接下来将对结构体在官方固件库是如何具体使用的做出简单说明. 结构体指针成员变量引用方法是通过“→”符号来实现,比如要访问student1结构体指针指向的结构体的成员变量name,那么方法是: stuednt1—>name; 如在STM32官方固件库中对端口使用模式结构体定义如下: typedef enum { GPIO_Mode_AIN = 0x0, //模拟输入模式 GPIO_Mode_IN_FLOATING = 0x04, //浮空输入模式 GPI

C# 定义一个学生的结构体,输入学生信息,学号,姓名,身高,按身高排序输出

class Program { //定义一个结构体 struct student//student就是我们自己造的新数据类型 { public int code;//public修饰符 public string name;//结构体的成员 public decimal height; } static void Main(string[] args) { ArrayList arr = new ArrayList(); for (int i = 0; i < 3; i++) { student

类和结构体

//类  class A {     var a = 0 } let classA = A() classA.a = 12     //虽然classA定义为常量,但是仍然可以修改A类中的变量值;结构体则不可以 //类属于引用类型,结构体属于值类型

C语言结构体及函数传递数组参数示例

注:makeSphere()函数返回Sphere结构体,main函数中,调用makeSphere()函数,传递的第一个参数为数组,传递的数组作为指针. 版权声明:本文为博主原创文章,未经博主允许不得转载.