~按位取反
++
#include <stdio.h>
int main()
{
int a = 10;
int b = a++;//++为后置,先使用,再赋值给b,结果为:a =11,b = 10
//int a = 10;
//int b = ++a;前置++,先++,然后赋值给b,结果为a = 11,b = 11
printf("%d,%d\n", a, b);
return 0;
}
根据上面代码可知,--是跟++一样的道理
强制类型转换
#include <stdio.h>
int main()
{
int a = (int)3.14;
printf("%d\n", a);
return 0;
}
将小数类型转换为整型,但是这样也会丢失小数数据,所以不建议使用
==
int a = 0;
int b = 10;
if (a >= b);//>=用来判断ab之间大于等于的关系,同理<,>道理相同
if (a == b);//==用来判断相等,=则为赋值,!=则用来测试判断不相等
&& ||
int c = a && b;//&&为与逻辑,有零出零,全一出一
int c = a || b;//||为或逻辑,又一出一,全零出零
条件操作符 exp1 ? exp2 : exp3
int a = 10;
int b = 20;
int max = 0;
max = (a > b ? a : b);//exp1 ? exp2 : exp3
//a要是大于b的话a将赋值给max,如果不满足大于的条件的话则b赋值给max
//意思即为
if (a > b)
max = a;
else
max = b;
[]下标引用操作符
()为函数调用符
int crr(int z, int y)
{
int x = 0;
x = z * y;
return x;
}
int main()
{
int a = 10;
int b = 20;
int sum = crr(a, b);
printf("%d\n", sum);
return 0;
}
常用关键字
auto-自动
// auto int a = 10;//auto被自动省略了
break-暂停 在switch中做跳出循环
case 选择语句
char-字符类型
const - 修饰常变量
contine-继续
default -默认循环
double-双精度
else-如果语句
enum-枚举常量
extern - 引用外部符号
float - 单精度浮点数
for- 循环
int-整型
long-长整型
register-寄存器关键字
register int b = 20;//把a变量存进寄存器,可以快速提取
return-返回
short-短整型
signed-定义成有符号数-日常定义中只需输入int
如果需要定义无符号整数,则需要unsigned
sizeof-计算字符大小
static-静态-修饰局部变量
此时的test每进入一次,a都会重新赋值
因为a一出{}生命周期就结束了
此时要是加入static,a就不会因为跳出生命周期而销毁
static也可以修饰全局变量
修饰局部变量中修饰的是局部变量的生命周期
修饰全局变量中修饰的是全局变量的作用域 -让静态的全局变量只能在自己所在的源文件内部使用
出了源文件就没法使用了
static也可以修饰函数,修饰函数外部链接变为内部链接
#include <stdio.h>
void crr()
{
static int x = 1;//修饰局部变量,使之a得到永生,不会因为跳出生命周期消失
x++;
printf(" % d\n", x);//此时结果为23456
}
int main()
{
int y = 0;
while (y < 5)
{
crr();
y++;
}
return 0;
}
struct-结构体关键字
switch-选择语句
typedef-类型定义
typedef unsigned int uint;//类型重定义,可以更改类型名字,别名
uint a = 10;
int b = 20;
union-共用体
while-循环
#define定义常量和宏
#include <stdio.h>
#define max 12//定义标识符常量
int main()
{
int a = max;
return 0;
}
定义宏
#include <stdio.h>
#define max(x,y) ((x) + (y))//定义宏
int main()
{
int sum = max(2, 3);
printf("max = % d\n", sum);
return 0;
}
内存
#include <stdio.h>
int main()
{
int a = 10;//等于向内存申请4个字节的空间
printf("%p\n", &a);//&取地址
return 0;
}
*-解引用操作符/间接访问操作符
#include <stdio.h>
int main()
{
char vf = 'd';
char* pc = &vf;
*pc = 'h';//*--解引用操作符
printf("%c", vf);
return 0;
}
结构体
#include <stdio.h>
struct book//做结构体类型首先得定义
{
char name[20];
int price;
};
int main()
{//使用结构体前得先初始化结构体数据
struct book a = { "军事理论",125 };//利用结构体类型创建一个该类型的结构变量
struct book* fb = &a; //写指针类型是直接找结构体来写
printf("%s\n", (*fb).name);//当用指针地址来寻找结构体就用这种方法
printf("%d\n", (*fb).price);
printf("书的名字为%s\n", a. name);
printf("书的价格为%d\n", a. price);
a.price = 25;
printf("降价后书的价格为%d\n", a.price);
return 0;
}
printf("%s\n", fb->name);//打印时有两种写法a.name/fb->name
strcpy-字符串拷贝,库函数
strcpy(a.name, "wgbsb");//strcpy字符串拷贝-库函数-string.h
一般都要开头声明#include <string.h>,但目前2022版本为声明也可以使用