1、数据类型
char-字符类型、int-整形、short-短整型、long-长整形、long long-更长的整形、float-单精度类型、double-双精度类型、
2、常量、变量、全局变量、局部变量
常量是固定不变的值。 变量是可以变换的值。
#include<stdio.h>
int main()
{
int a=10;
//这里的a就是变量
//数字10就是常量
return 0;
}
在变量中可分为全局变量和局部变量 全局变量是指定义在{}之外的变量。 局部变量是指定义在{}之内的变量。 ==注:局部变量的权重比全局变量高。例如局部变量和全局变量的变量名相同,但值不同。同时输出时将输出局部变量的值。当局部和全局的变量名相同也会更容易出现bug,所以尽可能不要变量名相同。
3、常量
常量可分为字面常量,const修饰的常变量,#define标识符常量,enum枚举常量 字面常量
#include<stdio.h>
int mian()
{
int a=10;
//a和10就是我们常见的普通变量和常量。
3;
//这里的3就是字面常量
return 0;
}
const 修饰的常变量
#include<stdio.h>
int mian()
{
const int a=10;
//在变量的最前面添加const,使得变量增加的常属性,从而无法修改变量的值。
num=20;
printf("%d\n",num);
//此时输出时,20将无法替换掉10,并且提示报错。
return 0;
}
#define 标识符常量
#include<stdio.h>
#define add 10;
int mian()
{
int a=add;
printf("%d\n",a);
return 0;
}
enum 枚举常量
#include<stdio.h>
enum
{
red,
yellow,
blue,
//;输出结果是0 1 2 以此类推。
};
int mian()
{
enum color c=red;
printf("%d\n",red);
return 0;
}
4、字符串+转义字符+注释
字符串 字符串是指有多个字符组成的 注:字符串输出时需要使用%s进行输出。 strlen 计算字符串的长度
#include<stdio.h>
int main()
{
int arr[]='abc';
printf("%s\n",arr);
int arr[]='a','b','c','\0';
printf("%s\n",arr);
pritf("%s\n",strlen(arr));
return 0;
}
\0就是一个转义字符,代表这字符串的结束,但并不能算做字符串内容。
\ddd、\x1,=dd \ddd是指/后面是三个八进制的数字 \xdd是指/x后面是两个十六进制的数字
#include<stdio.h>
#include<string.h>
int main()
{
printf("%c\n",strlen("c\test\32\test.h“));
printf("%c\n",strlen("c\test\x32\test.h"));
return 0;
}
\ddd是指先由八进制转换为十进制后,在标准ANSII码中查找对应字符,然后输出 \xdd是指先由十六进制转换为十进制后,在标准ANSII码中查找对应字符,然后输出 注:在\后出现的第一个字母,会被认为是转义字符。
::: hljs-center
:::
注释 注释有两种风格/……/和// //是c++的注释风格,可以注释单行或多行 /……/是c的注释风格,缺陷是不能嵌套注释
5、选择语句、循环语句
if()else
#include<stido.h>
int main()
{
int a=0;
if(a<5);
printf("a小于5\n");
else
printf("a大于5\n");
return 0;
}
while()
#inlcude<stdio.h>
int main()
{
int a=0;
while(a<5)
{
a++;
printf("a=%d\n",a);
}
if(a=5)
printf("a是6\n");
return 0;
}
6、函数
add[]-自定义函数
#include<stdio.h>
int add(int x,int y)
{
z=x+y;
return z;
}
int main()
{
int a=10;
int b=20;
int jg=z(a,b);
printf("%d\n",jg);
return 0;
}
7、数组
add[]
#include<stdio.h>
int main()
{
int add[]={1,2,3,4,5,6,7,8,9};
//下标:0,1,2,3,4,5,6,7,8
printf("%d\n",add[2]);//这是输出add数组中指定的某一个数字。输出时按照下标进行输出
return 0;
}
8、操作符
算术运算符 + - * / % 移(二进制)位操作符 >> <<
#include<stdio.h>
int main()
{
int a=1;
int b=a<<1;
//这句话的意思是a的二进制位向左移一位,再将值赋给b。
printf("%d\n",b);
return 0;
}
(二进制)操作符 &按位与 计算方法:0遇到0结果为0.1遇到1结果为1,1遇到0结果为0。
|按位或 计算方法:0遇到1结果为1,1遇到1结果为1,0遇到0结果为0
^按位异或 计算方法:0遇到1结果为1,1遇到1结果为0,0遇到0结果为0
赋值操作符 = += -= /= &= ^= |= >>== <<== 这些赋值操作符也叫做复合操作符。
==在c语言中非0代表真,0代表假== !逻辑操作符 !的意思是将非0数的数值变成0,0变成1
#include<stdio.h>
int main()
{
int a=10;
int b=!a;
printf("%d\n",b);
return 0;
}
~ 对一个数的二进制按位取反
#include<stdio.h>
int main()
{
int a=0;
int b=~a;
printf("%d\n",b);
return 0;
}
::: hljs-center
::: -- 前置、后置 - - ++ 前置、后置 ++
#include<stdio.h>
int main()
{
int a=10;
int b=--a;
int b=a--;
int b=++a;
int b=a++;
return 0;
}
当- -或+ +在a前面时,需要a先-1或+1,再将a的值赋给b 当- -或++在a后面时,需要a先将值赋给b,再将-1或+1
(类型)强制类型转换
#include<stdio.h>
int main()
{
int a=(int)3.14;
return 0;
}
使用()进行类型强制转换,()中放入int,将3.14的双精度转为整形。
关系操作符
,>=,<,<=!=,== !=用于测试不相等 ==用于测试相等
逻辑操作符 &&逻辑与
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int jg=a&&b;
printf("%d\n",jg);
return 0;
}
&&逻辑与的意思是指:a是非0吗?b也是非0吗?两边数值都是非0的情况下输出1。
||逻辑或
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int jg=a||b;
printf("%d\n",jg);
return 0;
}
||逻辑或的意思是:两个数值任意一个数是非0数就输出1。
条件操作符 exp1,exp2,exp3……expN 由逗号隔开的就是逗号表达式。
下标引用、函数调用和结构成员。 [],(),·,->
9、常见关键字
auto,break,case,char,const,,continue,defauit,do,double,else,enum,extren,float,for,got,if,int,long,register,teturn,sjort,signed,sizeof,static,struct,switch,stypedef,union,unsigned,void,volatile,while,
==注:自定义变量不可以和关键字相同== auto 自动变量
#include<stdio.h>
int main()
{
auto int a=10;
return 0;
}
auto自动变量是指在大括号中自动生效,离开大括号自动失效。但是每个变量都有自动变量,所以省略不显示了
register 寄存器变量
#include<stdio.h>
int main()
{
register int a=10;
return 0;
}
register寄存器变量是指使用寄存器变量可以使变量存在寄存器中,可以使我们更快的调用这个函数,但是register只是向寄存器申请,因为想要快速读取或调用的变量太多,具体是否可以存放到寄存器中,需要由寄存器判断。
signed 定义有符号的变量 unsigned 定义无符号的变量
#include<stdio.h>
int main()
{
signed int a=-10;
unsigned int a=10;
return 0;
}
signed可以输出负数或正数 unsigend只能输出正数。
typedef 类型重定义
#include<stdio.h>
int main()
{
typedef unsigned int =u_int;
u_int a=10;
return 0;
}
typedef是将名字长度过长的类型起一个较短的别名,方便我们后续使用这个类型。
static 静态 extern 声明外部函数 static 修饰局部变量
#include<stdio.h>
int test()
{
static int b=1;
b++;
printf("%d\n",b);
}
int main()
{
int a=0;
while(a<5)
{
test();
a++;
}
return 0;
}
static修饰全局变量
//文件1
#include<stdio.h>
int main()
{
extern a;
int b=a;
printf("%d\n",b);
return 0;
}
//文件2
strtic int a=10;
strtic修改函数的链接属性
//文件1
#include<stdio.h>
extern int add(int x,int y);
int main()
{
int a=10;
int b=20;
int jg=add(a,b);
printf("%d\n",jg);
return 0;
}
//文件2
int add(int x, int y)
{
int z=x+y;
return z;
}
#define 定义了宏和常属性 #define增加常属性
#include<stdio.h>
#define b 20;
int main()
{
int a=10;
return 0;
}
#define 定义了宏 ==注:使用宏是,宏名一般都是大写==
#include<stdio.h>
#define JG(x,y)(x>y?x:y)
int main()
{
int a=10;
int b=20;
int jg=ADD(a,b);
return 0;
}
10、指针
- 定义指针变量和解引用
#include<stdio.h>
int main()
{
int a=10;
int*p=a;
*p=20
return 0;
}
指针的大小 指针的大小在32位平台是4个字节,64位平台是8个字节
11、结构体
struct 结构体 strcpy 字符串拷贝 需要搭配string .h使用 ==注:strcpy在vs2022中使用会报错,需要搭配#pragma warning(disable:4996)使用。==
#include<stdio.h>
#include<string.h>
struct ren
{
char xm[10];
char xb[10];
short nl;
short tz;
}
int main()
{
struct ren r={"小明","男",18,75};
prinft("%s\n",r.char);
//这是经常使用的输出方法。
struct ren* p=r;
printf("%s\n",(*p).xm);
printf("%d\n",p->nl);
//这是使用指针输出的方法。
strcpy(r.xm,"小王");
//这是使用字符串拷贝替换内容的方法。
return 0;
}