一,struct 自定义类型介绍
一门语言通常先定义基本数据类型,还有很多自定义类型,不可能由语言一一实现。于是乎,给出一个struct关键字,开放自定义类型权限,于是便有了所有类型。此之谓“一生二,二生三,三生万物”。
二,结构体类型定义
1,无名结构体类型
不带来多余的类型名,只可在定义类型时定义变量。
#include<stdio.h>
#include<string.h>
struct Student
{
char name[100];
char sex;
int age;
float high;
}stu1;//构造新类型的同时定义变量
int main()
{
strcpy(stu1.name,"Geng");
stu1.sex='M';
stu1.age=20;
stu1.high=170;
printf("Name:%s\nSex:%c\nAge:%d\nHigh:%.1f\n",
stu1.name,stu1.sex,stu1.age,stu1.high);
return 0;
}
2,有名结构体类型
定义新类型名,在作用域内随处可用
#include<stdio.h>
#include<string.h>
struct Student
{
char name[100];
char sex;
int age;
float high;
};
int main()
{
struct Student stu1;//使用"有名的"新结构体类型名定义变量
strcpy(stu1.name,"Geng");
stu1.sex='M';
stu1.age=20;
stu1.high=170;
printf("Name:%s\nSex:%c\nAge:%d\nHigh:%.1f\n",
stu1.name,stu1.sex,stu1.age,stu1.high);
return 0;
}
3,结构体别名构造类型
使用typedef给结构体构造类型定义别名
typedef struct Student
{
char name[100];
char sex;
int age;
float score;
}STU;//给结构体构造类型struct Student定义别名为STU
STU stu1,stu2;//使用结构体构造类型别名定义结构体变量
注意:
结构体构造类型“{ }”后以“;”结尾
结构体类型名称为“struct + 结构体名”
三,结构体变量初始化及成员访问
凡是基本数据类型,既可在定义时初始化,也可先定义,之后再赋值;
凡是构造类型,只能在定义时初始化,不允许之后整体赋值。
1,初始化+以点运算符访问各成员
结果如下:
2,初始化+以指针向成员运算符访问成员
结果如下:
3,解引用符访问结构体成员
结果如下:
三,结构体赋值
对于相同类型的结构体可以直接赋值
结果如下:
数组整体赋值的实现:
结果如下:
四,结构体数组
利用结构体数组实现存储4名学生的信息。
输出4名学生信息:
内存分布:
注意:实际在内存中字符串存储在data ro数据区,在结构体中连续内存放的是字符串常量的地址。