C中的结构化数据类型
在编程过程中,您可能会觉得需要定义自己的数据类型。在C中,这是使用两个关键字完成的: struct
和typedef
。 结构和联合将使您有机会将非同质数据类型存储到单个集合中。
什么是结构?
- 结构 是C中的用户定义类型。它基于这样的想法,即程序员不仅要管理原始数据类型,还需要管理程序员定义的数据类型。
- 结构 ,顾名思义,是由各种原语数据类型,如字符,整数,浮点变量,数组等等
- 结构 还可以包含各种其他用户定义的数据类型。接下来你将学习嵌套结构。
- 结构 构成了 面向对象编程 的基础,因为_类_的概念源于结构。
struct关键字
struct
关键字可以帮助我们定义用户定义的数据类型。
struct StudentRecord
{
char Name[20];
int Class;
char Address[30];
char Phone[10];
};
- 我们还可以使用typedef定义一个结构 ,这样可以更轻松地在程序中稍后初始化一个结构。
typedef struct StudentRecord
{
char Name[20];
int Class;
char Address[30];
char Phone[10];
}Record;
在main()
,用户定义的数据类型StudentRecord定义为:
int main(void)
{
struct StudentRecord student1;
}
使用typedef ,用户定义的数据类型如下所示:
int main(void)
{
Record student1;
}
要访问存储在student1中的数据,我们使用点( 。 )运算符来访问结构类型变量的内容。
int main(void)
{
struct StudentRecord student1;
student1.Class = 10;
printf("Enter Name of Student\n");
scanf("%s",&student1.Name);
printf("Enter Address of Student\n");
scanf("%s",&student1.Address);
printf("Enter Phone Number of Student\n");
scanf("%s",&student1.Phone);
// Printing the Data
printf("Name: %s \n, Class: %d \n, Address: %s \n, Phone: %s \n",student1.Name, student1.Class, student1.Address, student1.Phone);
}
声明一种新的数据类型
typedef struct student_structure{
char* name;
char* surname;
int year_of_birth;
}student;
在这个小代码之后, student
将成为一个新的保留关键字,您将能够创建student
类型的变量。 请注意,这种新类型的变量将被构造,这意味着定义一个物理分组的变量列表,这些变量列表将放在一个内存块中的一个名称下。
新数据类型用法
现在让我们创建一个新的student
变量并初始化它的属性:
student stu;
strcpy( stu.name, "John");
strcpy( stu.surname, "Snow");
stu.year_of_birth = 1990;
printf( "Student name : %s\n", stu.name);
printf( "Student surname : %s\n", stu.surname);
printf( "Student year of birth : %d\n", stu.year_of_birth);
正如您在此示例中所看到的,您需要为新数据类型中包含的所有变量赋值。 要访问结构变量,您可以使用stu.name
的点。 还有一种更短的方法可以为结构赋值:
typedef struct{
int x;
int y;
}point;
point image_dimension = {640,480};
或者,如果您希望按照不同的顺序设置它的值:
point img_dim = { .y = 480, .x = 640 };
工会与结构
联合声明与结构相同,但不同,因为联盟中只能使用一个项目。
typedef union{
int circle;
int triangle;
int ovel;
}shape;
在这种情况下,您应该使用union
,只应用一个条件,并且只使用一个变量。 请不要忘记我们也可以使用我们全新的数据类型:
typedef struct{
char* model;
int year;
}car_type;
typedef struct{
char* owner;
int weight;
}truck_type;
typedef union{
car_type car;
truck_type truck;
}vehicle;
还有一些技巧
- 使用
&
运算符创建指向结构的指针时,可以使用特殊的->
缀运算符来对其进行处理。例如,在C中使用链接列表时,这非常常用 - 新定义的类型可以像几乎所有的其他基本类型一样使用。例如,尝试创建一个类型为
student
的数组,并查看它是如何工作的。 - 结构可以复制或分配,但你无法比较它们!
更多C语言教程
这里有更多完整C语言教程