操作符
算术操作符
+,-,*,/,%
int main(){
inta,b,c;
c=a+b;
c=a-b;
c=a*b;
c=a/b;//如果a,b都为整数,则结果也为整数,如4/3=1;要想结果出现小数,则a,b要有一个为小数,如5/2.0=2.5;
c=a%b;
}
移位操作符
左移操作符<<
右移操作符>>
位操作符
按位与&
按位或|
按位异或^
赋值操作符
赋值=,+=,-=,*=,/=,&=,|=,<<=,>>=//=是赋值,==是等于
int main(){
int a=c=2,b;
a=a-b;
c-=b;//此时a依然等于c;
}
单目操作符
!逻辑反(非)操作
&取地址
+正值
-赋值
sizeof操作数的类型长度
~对一个数的二进制按位取反//所有二进制中的数字,1变0,0变1
++自增//++在前先加后用,++在后先用后加
--自减//和++一样
*间接访问操作符
(类型)强制类型转换
例如:a+b,则此时+是双目操作符,有两个操作数,表示加号;+a,此时+是单目操作符,只有一个操作数。
关系操作符
==,>=,<=,!=,<,>;
逻辑操作符
逻辑与&&
逻辑或||
条件操作符
exp1?exp2:exp3//三目操作符
max=a>b?a:b
//如果exp1成立,则运行表达式exp2,程序结果为exp2的结果
//如果exp1不成立,则运行表达式exp3,程序结果为exp3的结果
//等价于
int main(){
int a,b,max;
if(a>b){
max=a;
}else{
max=b;
}
}
逗号表达式
//(a+b,c+d)
include<stdio.h>
int main(){
int a=3,b=4,c;
//逗号表达式从左往右计算
//最后一个表达式的结果是整个表达式的结果
c=(a=a-2,b=a+4);
printf("%d\n",c);//c的结果为5;
return 0;
}
关键字
-
关键字是c语言提供的,不能自己创建关键字
-
关键字不能用作变量名
-
define与include是预处理指令,不是关键字
auto |
break |
case |
char |
const |
continue |
default |
do |
自动 |
终止 |
实例 |
字符 |
常 |
继续 |
默认 |
执行 |
double |
else |
enum |
extern |
float |
for |
goto |
if |
双精度 |
否则 |
枚举 |
外部 |
单精度 |
循环 |
|
如果 |
int |
long |
register |
return |
short |
signed |
sizeof |
static |
整形 |
长整形 |
寄存器 |
返回 |
短整形 |
有符号的 |
求大小 |
静态 |
struct |
switch |
typedef |
union |
unsigned |
void |
volatile |
while |
结构体 |
|
类型定义 |
联合体 |
无符号的 |
空 |
|
直到…为止 |
重点
-
typedef–类型重定义
#include<stdio.h>
typedef unsigned int u_int;//将unsigned int类型的名字改为u_intu_int
int main(){
unsigned int a=100;
u_int b=100;//此时a,b是一个类型的
return 0;
}
-
static–静态的
-
修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
一般内存分为栈区,堆区,静态区。栈区存储局部变量、函数的参数;堆区参与动态内存分配;静态区存储全局变量、static修饰的变量。
//不加static
#include<stdio.h>
void test(){
int a=1;
a++;
printf("%d/n",a);
}//此时a的生命周期是进函数开始,出函数结束后清除
int main(){
int i=0;
while(i<10){
i++;
test();
}
return 0;
}//此代码结果为10个2
//加static
#include<stdio.h>
void test(){
static int a=1;
a++;
printf("%d\n",a);
}//此时a不会在出函数时被清除
int main(){
int i=0;
while(i<10){
i++;
test();
}
return 0;
}//此程序结果为2~11
-
修饰全局变量,使得全局变量只能在自己所在的源文件内部可以使用(本来可以在整个工程中使用)
全局变量在其它源文件中可以被使用,是因为全局变量具有外部链接属性,但是被static修饰后就变成了内部链接属性,就不能被其它源文件链接到这个静态的全局变量了。
//文件一
static int a=20;
//文件二
#include<stdio.h>
extern int a;//声明外部变量
int main(){
printf("%d",a);//被static修饰过的全局变量不能被使用
return 0;
}
-
修饰函数
static修饰过的函数只能在自己的源文件内部使用,不能再其它源文件内使用,原理与被static修饰的全局变量相同。
//文件一
static int Add(int x,int y){
return x+y;
}
//文件二
#include<stdio.h>
extern int Add(int x,int y);//声明外部函数
int main(){
int a=10,b=10;
int sum=Add(a,b);
printf("%d",sum);//被static修饰过的函数不能跨源文件被使用
return 0;
}
初学C语言,笔记中如果有错误,可以在评论区指正。