#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//typedef类型的重命名
//typedef unsigned int uint;//typedef 重新定义unsigned int 这整个为uint
是类型的重新命名
//int main()
//{
// unsigned int num = 0;
// uint num2 = 1;//和上面效果一样
// return 0;
//}
//
//static
//1.修饰局部变量
//2.修饰全局变量
//3.修饰函数
//1.修饰局部变量
//void test()
//{
// /*static*/ int a = 1; //加上了static修饰局部变量的时候,局部变量出了作用域也不会销毁,更换了内存存储位置,a经过一次循环后变2
// //static创建了一个静态存储区域,保留了上一个值
// a++;
// printf("%d ", a); /// 2 2 2 2 2 2 2 2
// ///局部变量a的生命周期从创建它到出去 }(花括号为出去) 就销毁了
//}
//
//int main()
//{
// int i = 0;
// while (i < 10)
// {
// test();//先执行完这个在下面的i++
// i++;
// }
//
// return 0;
//}
//void的意义
//
//void tset()
//{
// //执行任务
// printf("hello world\n");
// //不需要return 返回值就用void
//}
//
//
//int main()
//
//{
// return 0;
//}
//全局变量 static修饰全局变量 全局变量具有外部链接属性
//extern int g_val;
//
//int main()
//{
// printf("%d\n", g_val);
// return 0;
//}
//static修饰函数 函数也具有外部链接属性
//extern int Add(int x, int y);
//
//int main()
//{
// int a = 10;
// int b = 20;
// int z = Add(a, b);
// printf("%d\n", z);
// return 0;
//}
//define定义标识符常量
//#define NUM 100
//int main()
//{
// printf("%d\n", NUM);
// int n = NUM;
// printf("%d\n", n);
// int arr[NUM] = { 0 };
//
// return 0;
//}
//define定义宏
//宏是有参数
// 宏名 (宏的参数) 宏体
//#define ADD(x,y) ((x)+(y))
//
//int Add(int x, int y)
//{
// return x + y;
//}
//
//int main()
//{
// int a = 10;
// int b = 20;
// int c = ADD(a, b); //相当于是 int c = ((a)+(b)) 宏是完成替换的
// printf("%d\n", c);
//}
//指针变量初见
//int main()
//{
//
// int a = 10;//向内存申请4个字节,存储10
// /*&a;*///取地址操作符
// printf("%p\n", &a);// %p 打印地址 //00000029290FFCA4
// int* p = &a; //把a的地址存起来 int * 是类型 p是变量 不是*p int 说明p指向的对象(a)是int类型的
// // p是指针变量就是用来存地址的 存放地址的变量就是指针变量
//
//
// //char ch = 'w'; //同理上面的
// //char* pc = &ch;
//
// *p = 20; //解引用操作符,意思就是通过p中存放的地址,找到p所指向的对象,*p就是指向a的值
// printf("%d\n", a); ///a的值就变成了20
// return 0;
//
//}
//
//
//指针变量的大小
//int main()
//{
//
// //不管是上面类型的指针,都说在创建指针变量
// //指针变量是用来存放地址的
// //指针变量的大小取决于一个地址存放的时候需要多大的空间(和x64 和x32 机器有关)
// //32位机器上的地址:32bi位 - 4byte,所以指针变量的大小是4个字节
// //64位机器上的地址:64bi位 - 8byte,所以指针变量的大小是8个字节
//
// //sizeof 打印最好用%zu来打印
// printf("%zu\n", sizeof(char*)); //8字节
// printf("%zu\n", sizeof(short*));//8
// printf("%zu\n", sizeof(int*)); //8
// printf("%zu\n", sizeof(float*));//8
// printf("%zu\n", sizeof(double*));//8
//}
//结构体 初见
//学生
//struct Stu
//{
// //成员
// char name[20];
// int age;
// char sex[10];
// char tele[11];
//};
//
//void print(struct Stu* ps) //ps指针变量存了s的地址 只需要打印不需要返回void
//{
// printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
// printf("%s %d %s %s\n", ps->name,ps->age,ps->sex,ps->tele); // -> 指向对象的成员
//}
//
//int main()
//{
//
// struct Stu s = { "zhangsan",20,"nan","1313131313" };
// //结构体对象(s).成员名
// //printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);
//
// print(&s); //取出地址 放到print函数 ,地址要放到指针里面
// return 0;
//}
//作业
//
//1. 求商 求余
//int main()
//{
// int a = 0;
// int b = 0;
//
// //输入
// scanf("%d %d", &a, &b);
// //计算
// int c = a / b;
// int d = a % b;
//
// //输出打印
// printf("%d %d", c, d); //printf("%d %d",a/b,a%b) 一样的结果写法更加简易
// return 0;
//}
//