#define _CRT_SECURE_NO_WARNINGS//必须放在第一行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
/*
* 小技巧:利用Tab键自动补齐
* 编译链接
* 周六讲作业
* 结构体:自定义数据类型
* struct 结构体名
* {
* 成员列表
* };
* 结构体使用:
* struct 类型名 变量名 = {};
* 结构体普通变量通过"."访问其成员.例如 stu.age = 20;
* 结构体指针变量通过"->"访问其成员,例如 p->age = 20;
* C语言两个符号自带解引用 ,[]和->.
arr[i]==*(arr+i); p->age==(*p).age
* 在结构体中,参数传递总是传指针,不传结构体本身,为了节约空间
* C语言不支持函数名重载即不允许同名的函数多次出现.
* C++支持函数名重载,即一个函数名可以多次出现.
* C: 生成的符号只是在函数名前加"_".例如 _Max26
* C++: 生成的符号由函数名+参数列表+返回值,即参数不同生成的符号也不同
*/
//姓名(char 数组),年龄(int),分数(int)
struct Student
{
char name[20];//姓名
int age;//年龄
int score;//分数
};//这个结构体类型定义完成,它的作用和int完全相同
//void Max26(char a, char b)
//{}
//char Max26(char a, char b)
//{
// return '\0';
//}
struct A
{
char a;
int b;
};
int main()
{
printf("%d\n",sizeof(struct A));//8 ?? 内存对齐
//Max26(10,20);//调用时不唯一
printf("%d\n",printf("0123"));//阿里巴巴笔试
int a=0, b=0;
int len = scanf("%d,%d",&a,&b);
printf("%d\n",len);
printf("%d,%d\n",a,b);
return 0;
}
/*
//输出学生信息
void Print(struct Student a)//这种设计非常不好
{
printf("%s,%d,%d\n",a.name,a.age,a.score);
}//Print->_Print(C语言);Print->Print+参数(C++)
void Print(const struct Student* p)
{
printf("%s,%d,%d\n",p->name,p->age,p->score);
}//Print->_Print(语言);Print->Print+参数(C++)
int main()
{
struct Student stu = { "曹操",20,80 };
struct Student stu2 = {"刘备",18,70};
struct Student* p = &stu;
//Print(stu);
//Print(stu2);
Print(&stu);
Print(&stu2);
return 0;
}
*/
//struct A
//{
// int a;
// struct Student b;
// //struct B c;//error
//};
//
//struct B
//{
// int a;
//};
//
//struct C
//{
// int a;
// int b;
//};
//void Fun();
//int main()
//{
// char name[20];
// //name = "孙权";
// strcpy(name,"孙权");
// return 0;
//}
//int main()
//{
// struct Student stu = {"曹操",20,80};
// struct Student stu2 = {"刘备",18,70};
// struct Student* p = &stu;
// p = &stu2;
// (* p).age = 20;
// p->age = 21;
// //通过p输出学生信息
//
//
// return 0;
//}
//void Fun(int a)
//{
// ++a;//改变的仅仅是形参
//}
//
//void Init(int* p, int len)
//{
// for (int i = 0; i < len; i++)
// p[i] = 0;//*(p+i) = 0;
//}
//
//void Show26(int* arr, int len)
//{
// for (int i = 0; i < len; i++)
// printf("%d ",arr[i]);
// printf("\n");
//}
//
//int main()
//{
// int a = 10;
// Fun(a);
// printf("%d\n",a);//10
//
// int arr[] = {1,2,3,4,5,6,7,8,9,10};
// Init(arr,sizeof(arr)/sizeof(arr[0]));
// Show26(arr, sizeof(arr) / sizeof(arr[0]));
//
// return 0;
//}
//int main()
//{
// int a = 10;
// int b;//随机值
// int* p = &a;
// int arr[10] = {1,2,3,4,5,6};//初始化一部分则剩余部分为0
//
// struct Student stu = {"曹操",20,80};
// struct Student stu2;//随机值
// struct Student stu3 = {"刘备"};//初始化一部分则剩余部分为0
// stu3.score = 60;
// stu3.age = 18;
// //练习,输出stu3的所有数据
// printf("%s,%d,%d\n",stu3.name,stu3.age,stu3.score);
// //把stu3的姓名改为"孙权"
// //stu3.name = "孙权";//error
// strcpy(stu3.name,"孙权");
// printf("%s,%d,%d\n", stu3.name, stu3.age, stu3.score);
// //struct C sa = {1};
// //printf("%d\n",sa.a/sa.b);//崩溃,除0
//
// Fun();
//
// //printf();
// return 0;
//
#define _CRT_SECURE_NO_WARNINGS//必须放在第一行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
/*
* typedef:类型定义,定义新的类型 (给类型起别名)
* typedef 旧类型 新类型;
* typedef应用场景:
* 1.把长的类型起一个简短的别名
* 2.起一个和问题相关的别名.例如time_t
*结构体:
*
*/
struct A
{
};
int main()
{
return 0;
}
/*
//typedef 西安财经大学 西财;
typedef unsigned long long int uint64;//64位
typedef int* Pint;
typedef int Arr[10];
int brr[10];
struct Student
{
char name[20];
int age;
};
typedef struct Student Student;//后面就可以直接使用Student
typedef struct A
{
char a;
int b;
}A,*PA; //A == struct A; PA == struct A *
//typedef struct A A;
//typedef struct A* PA;//PA == struct A *
int main()
{
struct Student stu = {"liubei",20};
Student stu2 = {"caocao",21};
unsigned long long int a = 10;
uint64 b = a;
uint64* p = &a;
int c = 10;
int* p1 = &c;
Pint p2 = &c;//Pint 就是int *的别名
Arr d;//d就是长度为10的int数组
printf("%d,%d\n",sizeof(Arr),sizeof(d));
//malloc();
size_t;
time_t t1 = time(NULL);//int
printf("%lld\n",t1);
return 0;
}
*/
//struct Student
//{
// int id;//学号
// char name[20];//姓名
// int score;//成绩
//};
//
//void Input(struct Student* arr, int len)
//{
// printf("请输入%d个学生信息\n",len);
// for (int i = 0; i < len; i++)
// scanf("%d %s %d",&arr[i].id,&arr[i].name,&arr[i].score);
//}
//void Show(struct Student* arr, int len)
//{
// for (int i = 0; i < len; i++)
// {
// printf("%d,%s,%d\n",arr[i].id,arr[i].name,arr[i].score);
// }
//}
//
//int Cmp_stu_sco(const void* vp1, const void* vp2)
//{
// return -(((struct Student*)vp1)->score - ((struct Student*)vp2)->score);
//}
//
//int main()
//{
// struct Student arr[5];
// Input(arr,sizeof(arr)/sizeof(arr[0]));
// int len = sizeof(arr) / sizeof(arr[0]);
// qsort(arr,len,sizeof(struct Student),Cmp_stu_sco);
// Show(arr, sizeof(arr) / sizeof(arr[0]));
//
// return 0;
//}
//struct Person
//{
// char name[20];//候选人名
// int count;//票数
//};
//
len:候选人数量
//void Ticket(struct Person* arr, int len)
//{
// char name[20];//从键盘读取选票
// for (int i = 0; i < 5; i++)//唱票,模拟5个选民
// {
// scanf("%s",&name);
// //和所有的候选人比较
// for (int j = 0; j < len; j++)
// {
// if (strcmp(arr[j].name, name) == 0)
// {
// arr[j].count++;
// break;
// }
// }
// }
//}
//
//void Show(struct Person *arr,int len)
//{
// for (int i = 0; i < len; i++)
// {
// printf("%s,%d\n",arr[i].name,arr[i].count);
// }
//}
//
//int main()
//{
// struct Person arr[3] = {"caocao",0,"liubei",0,"sunquan",0};
// Ticket(arr,sizeof(arr)/sizeof(arr[0]));
// Show(arr, sizeof(arr) / sizeof(arr[0]));
//
// return 0;
//}
//struct Student
//{
// char name[20];
// int age;
//};
//
//void Show(const struct Student* arr, int len)
//{
// for (int i = 0; i < len; i++)
// {
// printf("姓名:%s,年龄:%d\n", arr[i].name, arr[i].age);
// }
//}
//
//int main()
//{
// struct Student arr[3] = { {"曹操",20},{"刘备",21},{"孙权",18}};
// /*for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
// {
// printf("姓名:%s,年龄:%d\n",arr[i].name,arr[i].age);
// }*/
// Show(arr, sizeof(arr) / sizeof(arr[0]));
//
// return 0;
//}
//
//struct Day
//{
// int year;
// int month;
// int day;
//};
//
//struct Student
//{
// int id;//学号
// char name[20];//姓名
// int sco[3];//三科成绩
//};
//
//int GetDays(struct Day* pd)
//{
// int count = 0;
// int arr[] = {31,28,31,30,31,30,31,31,30,31,30,31};
// if (pd->year % 4 == 0 && pd->year % 100 != 0 || pd->year % 400 == 0)
// arr[1] = 29;
//
// for (int i = 0; i < pd->month-1; i++)//1,1
// count += arr[i];
//
// count += pd->day;
//
// return count;
//}
//
//void Input(struct Student* p, int len)
//{
// printf("请输入%d个学生信息\n",len);
// printf("学号 姓名 科目1分数 科目2分数 科目3分数\n");
// for (int i = 0; i < len; i++)
// {
// scanf("%d %s %d %d %d",&(p->id),&p->name,
// &p->sco[0],&p->sco[1],&p->sco[2]);
// p++;
// }
//}
//
//void Show(struct Student* p, int len)
//{
// for (int i = 0; i < len; i++)
// {//p[i] == *(p+i)
// printf("%d,%s,%d,%d,%d\n",p[i].id,p[i].name,
// p[i].sco[0],p[i].sco[1],p[i].sco[2]);
// }
//}
//
//int main()
//{
// int arr[10] = {1,2,3};
// struct Student brr[2];
// Input(brr,sizeof(brr)/sizeof(brr[0]));
// Show(brr, sizeof(brr) / sizeof(brr[0]));
//
// return 0;
//}
//int main()
//{
// struct Day d1 = {2022,1,1};
// struct Day today = {2022,11,17};
// printf("%d\n",GetDays(&d1));
// printf("%d\n", GetDays(&today));
//
// return 0;
//}
n#define _CRT_SECURE_NO_WARNINGS//必须放在第一行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
/*
* struct :
* 定义:
* 使用:
* typedef:类型定义
* 共用体:也称联合体,公用同一段内存
* union 类型
* 内存对齐:
*
* char(1) ,short(2) ,int (4),long(4) ,long long(8) ,float(4),double(8),指针(4,8)
*/
//#pragma pack(1)//以1对齐
struct A
{
char a;//1+3
char buf[3];//不使用
int b;//4
};//8
struct B
{
char a;//1+1
short b;//2
int c;//4
};//8
struct C
{
char a;//1+7
double b;//8
short c;//2+6
long long d;//8
};//32
struct D
{
short a;//2+2
int* b;//4
double c;//8
};
struct E
{
char a;//1+1
short b[400];//800,(2) +2
int c;//4
};
struct F
{
char a;//1+3
struct FF
{
int b;
float c;
}d;//8
};//12
struct G
{
char a;//1+3
int b;//4
short c;//2
};//10+2
struct H
{
int a;//4
char b;//1
};//5+3
struct I //特殊情况,请记忆
{
char a;//1
struct II
{
int b;
float c;
};//0 II只是类型没有定义变量
int d;//4
//float;
};
struct J //特殊情况
{
char a;//1+3
struct //无名变量(没有类型名也没有变量名,生成一个无名的变量)
{
int b;
float c;
};//8
int d;//4
};//16
struct K
{
char a;//1
union kk
{
int b;
float c;
char d;
}e;//4
int f;//4
};//12
struct L
{
char a;//1+3
union
{
int *front;
int* up;
int* next;
};//4
};//8
//判断大小端
bool IsLittle()
{
return true;//??
}
int main()
{
printf("%d\n",sizeof(struct A));
//struct G sa;//10
//struct G arr[2];
struct L sl;
//sl.
return 0;
}
/*
struct A
{
char a;
short b;
int c;
};//8
union B//共用体,
{
char a;
short b;
int c;
};//4,不能同时使用多个成员
union C
{
int a;
int b;
float c;
};
int main()
{
printf("%d\n",sizeof(struct A));
union C ua;
ua.a = 10;
ua.c = 12.5f;//使用错误
printf("%d\n",ua.a);
union B ub; //经典笔试题
ub.a = 'a';
ub.b = 200;
ub.c = 0x12345664;
printf("%c\n",ub.a);//'d'
short s = 0x1234;
return 0;
}*/