在实际开发中,有时候需要处理多个基本数据类型的数据。例如,一个学生管理系统,需要的信息有姓名、学号、性别、年龄等信息,里面包含了字符型、整型、浮点和实型数据类型。在C语言中没有能够处理这样的数据类型,这是需要一个构造包含各种数据类型的类型,这种构造类型被称为结构体和共同体。

1.结构体

使用关键字struct  定义结构体:
struct结构体名
{
成员列表
};
例如定义一个cat的结构体:
structcat
{char catName[10]; //猫的名字
int age; //年龄
float weight; //体重
char sex; //性别
};
定义结构体变量
(1)声明结构体,再定义变量。
struct cat cat1;
(2)在声明结构体的同时,定义变量。
struct结构体名
{
成员列表;
}变量名;
以上述为例:
structcat
{char catName[10]; //猫的名字
int age; //年龄
float weight; //体重
char sex; //性别
}cat1;
(3)直接定义结构体类型变量。
struct{
成员列表;
}变量名列表;
以上述为例:
struct{char catName[10]; //猫的名字
int age; //年龄
float weight; //体重
char sex; //性别
}cat; //定义结构体变量
结构体初始化
以上述为例:
structCat
{char catName[10]; //猫的名字
int age; //年龄
float weight; //体重
char sex; //性别
}cat1={"小黄",2,2.3f,"雌"}; //定义变量并初始化
结构体变量引用
引用结构体变量成员的一般形式为:
结构体变量名.成员名
例如:
cat.catName;
cat.age;
赋值:
cat.catName="小黄";
cat.age=2;
当结构体遇见了数组
以上的定义,只能描述一只猫的信息,当我们需要描述多只猫的信息的时候,怎么办么?这就需要数组来帮忙了。
定义和初始化:
structCat
{char catName[10]; //猫的名字
int age; //年龄
float weight; //体重
char sex; //性别
}cats[4]={ {"小黄",2,2.3f,"雌"},
{"麻花",1,1.4f,"雄"},
{"斑点",2,2.3f,"雄"}
{"财财",3,4.1f,"雌"} }; //定义变量并初始化
结构体数组的引用:
结构体数组名[序号].成员名;

2.链表

链表是一个常见的数据存储结构,数据的元素逻辑顺序通过链表中的指针链连接实现的。它就像一列火车一样,如下图所示,一个节点就相当于一节车厢,节点中可以有不同的数据类型,而连接车厢的铰链就相当于一个指针。

链表的节点包含两个内容:

(1)节点中保存的数据;

(2)下一个节点的地址指针;

java定义结构体 java定义一个结构体_java定义结构体

创建链表

(1)malloc()函数

malloc()函数的原型如下:

void *malloc(unsigned int size);

该函数会在内存中动态地分配一块大小合适的内存空间。malloc()函数会返回一个指针,指向分配的内存空间,如果出现错误,则返回NULL。

(2)calloc()函数

calloc()函数的原型如下:

void *calloc(unsigned int size);

该函数会在内存中动态地分配n个长度为size的值的连续内存空间数组。calloc()函数会返回一个指针,指向动态分配的连续内存空间地址。如果出现错误,则返回NULL。

(3)free()函数

free()函数的原型如下:

void free(void *ptr);

该函数是使用由指针ptr指向的内存区,使部分内存区被其他变量使用。ptr是最近一次调用calloc()或者malloc()函数时返回的值。

3.共同体

定义共同体:

union 共同体名

{

成员列表;

}变量列表;

例如:

union DataUnion
{intiInt;charcChar;
}variable;

定义共同体变量:

union DataUnion variable;

初始化共同体变量时,只需要一个初始化值就足够了,其类型必须和共同体的第一个成员的数据类型一致。

例如:

union DataUnion variable={34};

引用共同体变量:

variable.iInt;

variable.cChar;

案例:

#includeunion DataUnion
{intiInt;charcChar;
};intmain()
{
union DataUnion letter;
letter.iInt=65;
printf("修改之前:%c",letter.cChar);
letter.cChar=‘D‘;
printf("修改之后:%c",letter.iInt);return 0;
}

输出:

修改之前:A

修改之后:D

请按任意键继续. . .