day04_结构体
define _CRT_SECURE_NO_WARNINGS
include <stdio.h>
include <stdlib.h>
include<string.h>
//结构体 :综合的数据类型 把不同的数据类型结合起来,成为一个自定义的数据类型
//struct Man
//{
// char name[20];
// int age;
// char* code;
//
//};
//void main(){
// //初始化结构体 只能在声明的时候赋值,不能单独赋值。
// //struct Man m1 = { "jack", 21 };
// struct Man m1;
// m1.age = 20;
// m1.code = "qweqeqweqe";
// strcpy(m1.name, "chengyue");
// printf("%s,%d", m1.name, m1.age);
// sprintf(m1.name, "json");
// system("pause");
//}
//结构体的几种写法
//1.添加变量,预先赋值
//struct Man
//{
// char name[20];
// int age;
// char* code;
//
//} m1,m2 = {"kack",12,"1231"};//m1,m2 结构体变量名称 m2 预先声明的变量
//
//typedef int Age;//取一个新的名字
//
//void main(){
// Age a = 8;
// m1.age = 12;
// m1.code = "qweq";
// strcpy(m1.name, "1233");
//}
// 2.匿名结构体
// 主要用在 控制结构体变量的个数(限量版结构)
//typedef struct{
// char name[20];
// int age;
// char* code;
//} m3 ,m4;
//3.1结构体的嵌套
//struct Teacher
//{
// char* name;
// int age;
//};
//struct Student
//{
// char* name;
// int age;
// struct Teacher t;
//};
//void main(){
// //struct Student s1 = { "chengyue", 12, {"json",23} };
//
// struct Student s1;
// s1.age = 12;
// s1.name = "12313";
// strcpy(s1.t.name, "json");
// strcpy(s1.t.age, 123);
//}
//3.2嵌套2
//struct Student
//{
// char* name;
// int age;
// struct Teacher{
// char* name;
// int age;
// } t;
//};
//void main(){
// struct Student s1;
// strcpy(s1.t.name, "chengyue");
//
// struct Teacher t1;
// t1.name = "chengyue";
// t1.age = 13;
//
// system("pause");
//}
//4 结构体 与指针
//struct Man
//{
// char name;
// int age;
//};
//void main(){
// struct Man m1 = {"jack",23};
// struct Man p = &m1;
// printf("%s,%d,%#x\n", (p).name,(p).age,&p);
// //结构体指针 -> 是 (*p). 的 简写
// printf("%s,%d,%#x\n", p->name, p->age, &p);
// system("pause");
//}
// 5 结构体 数组 遍历结构体的数组
//struct Man
//{
// char name;
// int age;
//};
//void main(){
// struct Man mans[] = {{"jack",23},{ "tom",13} };
// //遍历数组
// /struct Man p = mans;
// for (; p < mans + 2; p++){
// printf("%s,%d", p->name, mans->age);
// }
// int i = 0;
// for (; i < 2; i++){
// printf("%s,%d", mans[i].name, mans[i].age);
// }/
// //int i = 0;
// //for (; i < sizeof(mans) / sizeof(struct Man); i++){
// // printf("%s,%d", mans[i].name, mans[i].age);
// //}
//}
// 6 结构体的大小 字节对齐
//struct Man
//{
// int age;
// double weiget;
//};
//void main(){
// struct Man m1 = { 12, 23.2 };
// printf("%#x,---%d", &m1,sizeof(struct Man));
//
// system("pause");
//}
结构体变量的大小必须是最宽基本数据类型的整数倍
// 7.结构体与动态内存分配
//void main(){
// struct Man m_p = (struct Man)malloc(sizeof(struct Man) * 10);
// struct Man p = m_p;
// p->age = 13;
// p->name = "chengyue";
// p++;
// p->age = 13;
// p->name = "wer";
//
// struct Man loop_p=m_p;
// for (; loop_p < m_p + 2; loop_p++){
// printf("%s,%d\n",loop_p->name,loop_p->age);
// }
// free(m_p);
// system("pause");
//}
//8.typedef 类型取别名
//8.1.不同的名称代表不同的事情
//8.2 不同的情况下使用不同的别名
//8.3 简洁
//
//struct Man
//{
// char name;
// int age;
//};
//
//typedef struct Women{
// char name;
// int age;
//} W,WP;//w 是Women结构体别名,WP 是women结构体类型 指针类型的别名
////typedef struct Women w;
////typedef struct Women wp;
//
//
////结构体别名
//typedef struct Man man;
//typedef struct Man point_man;
//typedef int jint;
//typedef int point_int;
//void main(){
// jint t = 10;
// point_int p_i = &t;
//
// //结构体变量
// W w1 = { "rose", 20 };
// //结构体指针
// WP wp = &w1;
// printf("%s,%d\n", w1.name, w1.age);
//
// printf("%s,%d\n", wp->name, wp->age);
// printf("pause");
//}
//
// 结构体函数指针成员
//typedef struct Girl
//{
// char name;
// int age;
// //函数指针
// int (sayHi)(char);
//};// Girl 结构体类似于java中类,
//
//int sayHi(char name){
// MessageBoxA(0,name,"titile",0);
// return 1232323;
//}
//
//void main(){
// struct Girl g1;
//
// g1.age = 12;
// g1.name = "chengyue";
// g1.sayHi = sayHi;
//
// int i=g1.sayHi("wer");
//
// printf("%s,%d,%d\n", g1.name, g1.age,i);
//
// system("pause");
//}
typedef struct Girl
{
char name;
int age;
//函数指针
int(sayHi)(char*);
}Girl;// Girl 结构体名和 别名一样,
typedef Girl* GirlP;
//改名
void rename(GirlP gp1){
gp1->name="12wqe";
}
//联合体(共用体)
//不同类型的变量 共同占用一段内存(想混覆盖),联合变量任何时刻只有一个成员存在,
//目的是为了节省内存。
//大小:联合体变量的大小=最大的成员所占的字节数
//union Data
//{
// int x;
// int y;
// double z;
//};
//void main(){
// union Data d1;
// d1.x = 90;
// d1.y = 100;//最后一次赋值有效
// //d1.z = 12.3;
// printf("%d,%d,%lf\n", d1.x, d1.y, d1.z);//100,100,-9255959211
// system("pause");
//}
//枚举 固定的值
enum Day
{
MonDay=1,
Tuesday=2,
Wednesday=3,
};
void main(){
//枚举中的值必须是括号中的值
enum Day d = MonDay;
printf("%#x,%d", &d, d);
int i = 0;
enum Day *p = &d;
system("pause");
}