C语言之结构体概述
1、结构体类型是一种自定义类型
(1)C语言中有2种类型:原生类型和自定义类型。
2、结构体使用时先定义结构体类型再用类型定义变量
(1)结构体定义时需要先定义结构体类型,再用类型来定义变量。
struct leixing
{
int a;
double b;
char c;
};
struct leixing lx;
(2)也可以在定义结构体类型的同时定义结构体变量。
struct leixing
{
int a;
double b;
char c;
}lx;
注:typedef struct leixing //将类型struct leixing重命名为lx,lx是一个类型名,不是变量
{
int a;
double b;
char c;
}lx;
3、从数组到结构体的进步之处
(1)结构体可以认为是从数组发展而来的。其实数组和结构体都算是数据结构的范畴了,数组就是最简单的数据结构、
结构体比数组更复杂一些,链表、哈希表之类的比结构体又复杂一些;二叉树、图又更复杂一些。
(2)数组有2个明显的缺陷:第一个是定义时必须明确给出大小,且这个大小在以后不能再更改;第二个是数组要求所有的
元素的类型必须一致。更复杂的数据结构中就致力于解决数组中的这两个缺陷。
(3)结构体是用来解决数组中第二个缺陷的,可以将结构体理解为其中一个数组元素可以不相同的数组。结构体完全可以
取代数组,只是在数组可用的范围内数组比结构体更简单。
4、结构体变量中的元素如何访问?
(1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式);实质上都是指针方式访问。
(2)结构体变量中的元素的访问方式:只有一种,用.或者是->的方式来访问。(.或者是->访问结构体元素其实质是一样的。
只是C语言规定用结构体变量来访问元素用. 用结构体变量的指针来访问元素用->。实际上在高级语言中已经不区分了,都用.)
(3)结构体的访问方式有点类似与数组下标的方式
结构体变量的.或者->访问元素的实质还是用指针来访问的。
struct student
{
int a;
double b;
char c;
};
int main()
{
struct student s1;
s1.a = 12; //int *p = (int *)&s1; *p = 12;两者等价
s1.b = 4.4; //double *p = (double *)(&s1 + 4); *p = 4.4;
s1.c = 'a'; //char *p = (char *)((int)&s1 + 12); *p = 'a';
}
|