结构体讲解:

基本类型

|--整型  浮点型  字符型
|--指针类型


构造类型
|--结构体
|--共用体
|--枚举


一、结构体的概念:
是一种程序员自己定义的数据类型
1>数据类型是抽象的而变量是具体的
2>先有类型后有变量  
3>数据是万事万物
typedef struct box
{
int length;
int width;
int high;
}BOX;

typedef struct book
{
char bookName[100];
float price;
int isbn[100];
}BOOK;

typedef struct fan
{
int w;//功率
int brand;//品牌
}FAN;

注意:
1>类型名可以省略,但是最好不要
2>typedef 也可以省略,但是此时类型的别名就变成了变量名
    ,最好不要这样
3>结构体通常定义在文件作用域中,表示到处可以使用该结构体
语法上可以将结构体定义在函数作用域,表示该结构体只能
在所在的函数的函数中使用
demo
void foo(void)
{
   typedef struct pt
   {
       int x;
       int y;
   }PT;//PT类型只能在foo函数中使用
}
4>属性的类型不能“自引用”
typedef struct point
{
int x;
int y;
struct point* next;//OK 指针占据4byte
struct point  pre;//错误,不能自引用
POINT curr;//错误,因为超出了POINT的作用域,而且是自引用
}POINT;
5>可以嵌套定义结构体,至少允许15层
date结构体并不是person私有结构体,date是公用的!
而且date的属性(year month day)是暴露在person中的

typedef struct person
{
    struct date
    {
    int year;
    int month;
    int day;
    };
}PERSON;
int main(void)
{
PERSON me;
me.day;
me.month;//可以直接使用
me.year;
}

二、用
2.1内存结构
注意:
(内存对齐)
1>内存结构的变量,每一个属性都要占据内存
    系统从上自下的为每一个属性分配内存
2>要判断属性的地址是否为当前属性长度的整数倍,
    如果地址不是属性长度的整数倍,就会扩展到整数倍
3>最后总的内存大小必须是最长分量的整数倍

2.2初始化  和   赋值
demo
typedef struct date
{   
    int year;
    int month;
}DATE;
typedef struct point{
int x;
int y;
DATE date;
}POINT    ;

int main(void)
{
//初始化
POINT a;
a = { 0,0,0,0};
POINT b[3] = {
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
POINT c[2][3] = {
{ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
{ { 0, 0, 0, 0}, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } }
};

//赋值
a.x = 0;
a.y = 0;
a.date.month = 0;
a.date.year = 0;
//通过指针赋值
POINT* p = &a;
(*p).x = 0;
(*p).y = 0;
(*p).date.month = 0;
(*p).date.year = 0;

p->x = 0;
p->y = 0;
p->date.month = 0;
p->date.year = 0;
return 0;
}

3.3结构体变量的用法:
类型相同的结构体变量可以赋值,但是不能比较
typedef struct kk
{
char address[100];
}KK;
typedef struct tt
{
char tel[100];
char name[100];
KK kk;
}TT;
int main(void)
{
TT a, b;
strcpy(a.name, "kkk");
strcpy(a.tel, "10010");
strcpy(a.kk.address, "china");
b = a;
puts(b.name);
puts(b.tel);
puts(b.kk.address);
strcmp(b.name, a.name);
return 0;
}
3.4结构体变量作为函数的参数和返回值








猜你喜欢

转载自blog.csdn.net/qq_42354917/article/details/80526626