Talk is cheap,show the code.
目录
操作符
/除
7/2==2(整数除法两端都是整数,小数点直接舍去不会四舍五入)
7.0/3==2.333333 或写成 7/3.0(小数除法两段有一个数是小数)
%求余 取模
7%3==1
一个等号是赋值,两个等号是等于。
static静态
修饰变量(局部,全局)和函数
1.static修饰局部变量
进入作用域创建,出作用域销毁 static修饰局部变量的时候,局部变量就变成了静态局部变量,出了局部范围不会被销毁,下一次进入函数依然存在
因为static修饰的局部变量是存储在静态区的
内存 分为 栈区,堆区,静态区
栈区 -局部变量 函数的参数
堆区 -动态内存开辟的 malloc realloc calloc free
静态区 -(特点:出了范围不被销毁)静态变量 全局变量(生命周期很长)
静态区中的数据生命周期与程序的生命周期是一致的,程序结束,静态的生命周期也就结束了。
作用:
修饰局部变量时,实际改变的是存储位置,本来一个局部变量放在栈区,被static修饰就放在静态区。 从而导致,出了作用域依然存在,生命周期没有结束。
2.static修饰全局变量
在整个工程里都可以使用(无论创建多少个源文件)
extern是用来声明外部(其他源文件)符号
作用:
一个全局变量本来是具有外部链接属性的,但被static修饰之后,外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用,不能在其他文件内部使用。
(使用上会感觉作用域变小了)
3.static修饰函数
作用:
一个函数本来是具有外部链接属性的,但是被static修饰后,外部链接属性就变成内部链接属性,这时这个函数只能在自己所在的源文件内部使用,在其他文件里是无法使用的。
(使用上会感觉作用域变小了)
#define定义常量和宏
预编译-编译-汇编-链接-运行
1.#define定义常量
#define MAX 1000
//#define STR "hello bit"
int main()
{ int m=MAX;
printf("%d\n",m);
//printf("%s\n",STR);
return 0; }
打印出1000 或者hello bit
预编译会吧MAX全部替换成1000
内容替换
2.#define定义宏
//函数的实现
int get_max(int x, int y)
{
//int z=0;
//z=(x>y?x:y);
//return z;
return (x>y?x:y);//简单写法
}
int main()
{
int a=10;
int b=20;
int m=get_max(a,b);
printf("较大值:%d\n",m);
return 0;
}
//#define定义宏
#define MAX(x,y) ((x)>(y)?(x):(y))
int main()
{
int a=10;
int b=20;
int m=MAX(a,b);
printf("较大值:%d\n",m);
return 0;
}
宏名一般全大写,宏没类型也没返回类型
宏体可以多条语句
指针
内存是电脑上重要的存储器
一个内存单元大小是一个字节
内存单元的编号如何产生?-->-->
32位:32根地址线/数据线
地址线-电线-通电
电信号转换成数字信号 0/1
内存单元是有编号的,编号就是内存单元的地址。
int main()
{
int a=10;
printf("%p\n",&a);//%p打印地址
return 0;
}
指针其实就是个地址,一个编号
//存地址
int main()
{
int a=10;
int* pa=&a;//pa 是用来存地址的,所以我们把pa叫指针变量
//char ch='w':
//char* pc=&ch;
*pa=100;//*解引用操作符
printf("%d",a);//100
return 0;
}
*-->pa是指针变量(专门用来存放地址)
int-->pa指向的对象是int类型的
*pa 通过pa中存放的地址,找到它所指向的对象
&取地址操作符
*解引用操作符
指针变量的大小
用sizeof计算
指针大小取决于平台(地址的大小)
32位平台:
不管什么类型都是4个字节 4byte
64位平台: 8byte
描述复杂类型
struct结构体关键字
用{}来初始化
//类型
typedef struct Stu
{
char name[20];//名字-字符串
int age; //年龄 - 整数
char sex[5]; //性别 - 字符串
char id[20];//学号 - 字符串
}Stu;
void Print(struct Stu* ps)
{
//printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->id);
//-> 结构成员访问操作符
//结构体指针->结构体成员
}
int main()
{
//结构体变量
struct Stu s1 = {"张三", 18, "男", "2021060701"};//学生1
struct Stu s2 = {"如花", 45, "女", "2021060702"};//学生2
Stu s3 = {0};
//输入结构体数据
scanf("%s %d %s %s", s1.name, &(s1.age), s1.sex, s1.id);
//直接打印的
printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);
//. 结构成员访问操作符
//结构体变量.结构体成员
//使用函数打印
Print(&s2);
return 0;
}