[C语言 - 7] 结构体struct

A. 基本知识

与数组的对比

数组:

构造类型

只能有多个相同类型的数据构成

结构体:

结构体类型

可以由多个不同类型的数据构成

1. 定义类型

1     struct Student
2     {
3         int age;
4         char *name;
5         float height;
6     };

2. 定义结构体变量

定义变量的多种方式

a.

1     //define a struct variable
2     struct Student stu = {27, "simon", 1.65f};

b.

1     struct Student {
2         int age;
3         char *name;
4         float height;
5     } stu = {25, "simon", 1.65f};
1     /*错误写法
2     struct Student p;
3     p = {17, "Tom"};
4      */

c.

1     struct Student p;
2     p.age = 17;
3     p.name = "Tom”;

d.

1     struct Student p2 = {17, "Sam”};

e.

1     struct Student p3 = {.name="Judy", .age= 44};

f.匿名

1     struct
2     {
3         int age;
4         char *name;
5     } stu3;

3. 不允许结构体进行递归定义

在结构体构造代码内定义本结构体的变量

4. 可以包含其他的结构体

 1 void test1()
 2 {
 3     struct Date
 4     {
 5         int year;
 6         int month;
 7         int day;
 8     };
 9
10     struct Student
11     {
12         int age;
13         struct Date birthday;
14     };
15
16     struct Student stu = {25, {1989, 8, 10}};
17
18     printf("my birthday ==> %d-%d-%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
19 }

5. 结构体数组

1     struct Student
2     {
3         int age;
4         char *name;
5         float height;
6     } stus[5];

匿名

1     struct
2     {
3         int age;
4         char *name;
5         float height;
6     } stus[5];

6. 结构体作为函数参数, 传递的仅仅是成员的值

7. 指向结构体的指针

 1 void test4()
 2 {
 3     struct Person p = {33, "ss"};
 4     struct Person *pointer;
 5
 6     pointer = &p;
 7
 8     printf("test4: person‘s age = %d\n", p.age);//It‘s p!!!, not pointer!!
 9     printf("test4: person‘s age = %d\n", (*pointer).age);
10     printf("test4: person‘s age = %d\n", pointer->age);
11 }

==> 3种方式访问结构体成员变量

a. struct.v

b. (*pointer).v

c. pointer->v

8.结构体内存分配

a.定义的时候不会分配存储空间

b.定义结构体变量的时候分配空间,分配的空间大小是最大成员变量的倍数

9.结构体复制

1     struct Student p2 = {17, "Sam"};
2     struct Student p3 = {.name="Judy", .age= 44};
3     p3 = p2;
4     printf("p3: age->%d, name-.%s\n", p3.age, p3.name);

out:

p3: age->17, name->.Sam

时间: 2024-10-16 05:00:44

[C语言 - 7] 结构体struct的相关文章

C语言,结构体(struct)的详细用法

结构(struct)      结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合.   结构中可以使用不同的数据类型.       1. 结构说明和结构变量定义       在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它   类型的变量一样, 在使用结构变量时要先对其定义.       定义结构变量的一般格式为:        struct 结构名        {             类型  变量名;             类型  变量

C语言 - 结构体(struct)的位字段(:) 详解

结构体(struct)的位字段(:) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)可以使用位字段(:), 节省空间, 如以下代码, 结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界); 但是sizeof()会自动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节; 当使用加法运算时, 会初始化为0; 代码: /* *

go语言之行--结构体(struct)详解、链表

一.struct简介 go语言中没有像类的概念,但是可以通过结构体struct实现oop(面向对象编程).struct的成员(也叫属性或字段)可以是任何类型,如普通类型.复合类型.函数.map.interface.struct等,所以我们可以理解为go语言中的“类”. 二.struct详解 struct定义 在定义struct成员时候区分大小写,若首字母大写则该成员为公有成员(对外可见),否则是私有成员(对外不可见). type struct_variable_type struct { mem

C语言结构体-struct

知识点: 1)结构体的定义. 2)结构体的sizeof. 3)  结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将定义一个结构体 struct Student{ char *name; int age; int sid; }; 我用上面定义的结构体Student来定义一个变量. struct Student student; 上面的代码有点烦,其实我可以这样写 struct Student{ char *nam

C语言 - 结构体(struct)比特字段(:) 详细解释

结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)能够使用位字段(:), 节省空间, 例如以下面代码, 结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界); 可是sizeof()会自己主动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节; 当使用加法运算时, 会初始化为0; 代码

关于c#的结构体struct与class的区别

C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中分配空间,栈中保存的只是引用. 2.结构类型直接存储成员数据,让其他类的数据位于对中,位于栈中的变量保存的是指向堆中数据对象的引用. C#中的简单类型,如int.double.bool等都是结构类型.如果需要的话,甚至可以使用结构类型结合运算符运算重载,再为C#语言创建出一种新的值类型来.

C# 结构体 struct

C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中分配空间,栈中保存的只是引用. 2.结构类型直接存储成员数据,让其他类的数据位于对中,位于栈中的变量保存的是指向堆中数据对象的引用. C#中的简单类型,如int.double.bool等都是结构类型.如果需要的话,甚至可以使用结构类型结合运算符运算重载,再为C#语言创建出一种新的值类型来. 由于结构

黑 马 程 序 员_视频学习总结<C语言>----05 结构体

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.什么是结构体 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型.为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的. 二.结构体的定义 结构体内部的元素,也就是

c语言的结构体字节数统计

struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如:?typedef struct Student{??? short id; //2个字节??? char name[15]; //1*15个字节??? int age; //4个字节??? char num; //1个字节} Student; 总共28个字节. c语言的结构体字节数统计