1> 自定义类型
用户按C语言规则,自定义类型;
//--------------------------//
struct basketball {
char brand[18];
int size;
char colour[8];
float price;
};
//--------------------------//
结构体类型名:basketball;
结构体成员: brand, size,
colour, price;
//--------------------------//
自定义一个:
struct basketball类型;
声明一个:
struct basketball类型;
//--------------------------//
- 与数组相比,结构体封装的的数据类型可以不同;
- 封装的数据brand,size,colour,price 是关联的,都是basketball的属性,因此封装起来,使用方便;
2> 结构体变量_声明
//--------------------------//
/* struct basketball 类型 */
struct basketball {
char brand[18];
int size;
char colour[8];
float price;
};
//--------------------------//
/* 定义结构体变量 */
struct basketball aa;
"struct basketball 是整体"
//--------------------------//
struct basketball 类型名太长!
/* 类型起别名,方式1 */
typedef struct basketball BALL;
BALL aa;
/* 类型起别名,方式2 */
typedef struct basketball {
char brand[18];
int size;
char colour[8];
float price;
} BALL;
//--------------------------//
3> 结构体变量_初始化
typedef struct basketball {
char brand[18];
int size;
char colour[8];
float price;
} BALL;
// 初始化方式1:
BALL aa =
{
"LiNing",
7,
"Brown",
888.8
};
// 初始化方式2(推荐使用):
BALL aa =
{
.band = "LiNing",
.size = 7,
.colour = "Brown",
.price = 888.8
};
只有初始化时:
才可一次写入多个数据;
{ } 初始化列表;
数据类型与结构体成员类型一致;
用‘逗号’(,)隔开, 与数组一样;
- 使用中,一把都是单个元素使用;
4> 结构体_成员空间_读写
#include <stdio.h>
#include <string.h>
//结构体变量类型,定义为全局;
typedef struct basketball {
char brand[18];
int size;
char colour[8];
float price;
} BALL;
int main()
{
BALL aa;
strcpy(aa.brand, "LiNing");
aa.size = 7;
strcpy(aa.colour, "Brown");
aa.price = 888.8;
printf("Bran: %s\n",aa.brand);
printf("size: %d\n",aa.size);
printf("colour: %s\n",aa.colour);
printf("price: %f\n",aa.price);
return 0;
}
‘.’ 成员运算符;
结构体变量名.成员名
数组的访问,不能一次性全部赋值
aa.brand = “LiNing” ( x )
成员运算符【.】, 很有意思,非常形象;类似目录,子目录,比如 [1>] 下面的 [1.1>] [1.2];
5> 结构体_指针
//--------------------------//
// 测试代码: //
//--------------------------//
#include <stdio.h>
typedef struct basketball {
char brand[18];
int size;
char colour[8];
float price;
} BALL;
int main()
{
BALL aa = {"LiNing", 7, "Brown", 888.8};
/* 指向结构体的指针 */
BALL *ptr = &aa;
printf("--------内存地址-----------\n\n");
printf("brand > %p\n", &aa.brand);
printf("size > %p\n", &aa.size);
printf("colour > %p\n", &aa.colour);
printf("price > %p\n\n", &aa.price);
printf("--------内存数据-----------\n\n");
printf("brand = %s\n", aa.brand);
printf("size = %d\n", aa.size);
printf("colour = %s\n", aa.colour);
printf("price = %f\n", aa.price);
printf("---------------------------\n");
printf("ptr > %p\n", &ptr);
printf("ptr = %X\n", ptr);
printf("---------------------------\n");
printf("brand: %s\n", aa.brand);
printf("brand: %s\n", (*ptr).brand);
printf("brand: %s\n", ptr->brand);
printf("size: %d\n", ptr->size);
return 0;
}
//--------------------------//
*ptr 得到:内存空间aa;
-------------------------
内存空间4个属性:
1>内存地址:0x0060FEDC;
2>内存大小:36Byte;
3>数据类型:BALL;
4>数据数值:{"LiNing", 7, "Brown", 888.8}
---------------------------
(*ptr).brand 相等于 aa.brand
---------------------------
为方便书写,使用
结构体成员运算符 -> 简写
ptr->brand;
//--------------------------//