一:操作符
除法:
如果都是整数,除数,被除数都是整数,那么结果:就是整数的商(没有小数部分的),例如:7/2=3;
如果除数或者被除数其中一个是浮点数,那么结果就是(条件是:能除尽的,并且小数在基础数据类型包含下的)完整的商(包含小数部分的):例如:7/2.0=3.500000;
如果想要在printf中,想要取小数点后1位,基本类型是:float----%.1f;如果是double----%.1lf,其他的就是类似(什么小数点后几位什么的,这个数字就是变换着来就行了)
取模:
取模操作符的两端都是整数
逗号表达式:
逗号隔开的一串表达式,特点:从左向右的依次计算,整个表达式的结果是最后一个表达式的结果,
例如:int a=10;int b=20;int c=0;int d=(c=a-2,a=b+c,c-3); d=5
二:关键字
typedef:
1.用于一个已有名字的数据类型,使其更新一个新的名字,让代码变得更加的简介,例如:在头部写上:typedef unsigned int unit;那么在main里面
unsigned int num1; 与unit num2;是相同的类型,只不过名字不相同,但是效果一样的
2.用于结构体上面,把结构体命一个新的名字,例如:
typedef struct Node { int data; struct Node *next; } Node;在main里面 :struct Node n;与 Node n2;的效果是一样的
static:
1.修饰局部变量
//在不使用static的时候
#include<stdio.h>
void test(){
int a=1;
a++;
printf("%d ",a);
}
int main(){
int i=0;
while(i<10){
test():
i++;
}
}
这个的结果就是:2 2 2 2 2 2 2 2 2 2
//在使用static的时候呢
#include<stdio.h>
void test(){
static int a=1;
a++;
printf("%d ",a);
}
int main(){
int i=0;
while(i<10){
test():
i++;
}
}
这个的结果就是:2 3 4 5 6 7 8 9 10 11
-
为什么会有这么大的差距呢,就是因为static 存在,static修饰局部变量的时候,局部变量出了作用域,不会销毁,本质上就是,static修饰局部变量的时候,该变量了变量的存储位置(由局部变量----->成为静态变量)。影响了变量的生命周期,生命周期变长,变成和程序的生命周期一样
-
栈区:局部变量 |
堆区: |
静态区:静态变量 |
2.修饰全局变量
static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。其他的源文件(.c)就不能再次使用这个全局变量,例如:
test1.c
int num=10;
test2.c
#include<stdio.h>
#include"test1.c"
int main(){
print("%d\n",num);
return 0;
}
这个结果就是:10
如果变成static修饰的全局变量(num)时,这个全局变量(num)就是从外部链接属性变成了内部链接属性,test2.c这个源文件不能使用test1.c的内部变量了,例如:
test1.c
static int num=10;
test2.c
#include<stdio.h>
#include"test1.c"
int main(){
print("%d\n",num);
}
结果:报错,原因,num这个变量没有定义且不存在
3.修饰函数
这个与修饰全局变量差不多,函数由原本的外部链接属性变成了内部链接属性
标签:main,int,重温,写写,num,static,修饰,天开,全局变量 From: https://www.cnblogs.com/xiejinghao/p/18518888