文章目录
总体:变量、运算符、表达式、控制流、函数、指针、数组、结构体、输入与输出、文件
一、类型、运算符与表达式
1.1 类型
种类:char(字符型)、int、float、double
加“配件”–》short、long(for int);signed 、unsigned(for char int)
注意点:
short (int)a;
signed char强制char可以存储有符号整数,unsigned char强制char可以存储无符号整数,,char不加任何限定,则是否有符号根据所在机器而定。
常量:
10 、10l(10L)、10.0【double】、10.0f/F【float】
10(十进制)、010(八进制)、0x10(十六进制)
‘0’【字符型常量,可用于计算,ASC码】;“I am Iron Man”【字符串常量,可拼接】
1.2 运算符
- % 取余运算符
×%y 结果是x除以y的余数部分。x和y必须是整型操作数。在有负操作数的情况下,取模运算结果的符号取决于具体机器的实现。 - ++ --自增 自减:x++(先返回x的值,后x+1);++x(先x+1,后返回+1后的x的值)
- 逻辑运算符:&& || !【与或非】
- 位操作符:&(按位与) | (按位或)<< (算数左移) >> (算数右移)~(按位取反) ^(按位异或:相加但不进位)
- 其他运算符:
sizeof 运算符 :sizeof(数据类型、变量或常量)
问号运算符 : <表达式1>?<表达式2>:表达式3> //1为真时,输出2;否则为3
1.3 类型转换
数据位短的向长的转换
注意:short int + char --》int;只要float 和long同时出现 就会变成double
强制转换 (类型名)表达式
注意:类型转换只体现在结果上,并不会改变被转换变量的类型。
二、控制流(循环和判断)
- if语句
- switch语句
- while语句(不知道循环多少次时)
- for 循环(知道循环多少次时)
- do-while循环 至少做一次
三、函数
return语句直接退出函数
函数默认返回int型
函数参数:若为x—》a本身没变化,只是x在变;若&x(x是引用型)—〉相当于对操作
作用域规则
- 注意语句块
- 内层可看外层;外部不能看内部
静态变量:static int i = 0;
递归:直接递归(自己调用自己)或间接递归
四、指针与数组
- &a;//取地址
- int a = 10;int *a_ = &a;//a的地址赋给指针型变量a_;即a_指向a
- *a_等于a;//指针功能之一;⚠️int *a_ 与 *a_不同
- 用指针与数组的首地址来访问数组每一个元素
`
int main()
{
int a[4] = {1,2,3,4};
int *p = a;//把数组a的首地址赋给p
for(int I = 0;I<4;I++)
cout<<*(p+i)<<“ ”;
cout<<endless;
return 0;
}
`
五、结构体和类
- typedef:用来给数据类型取新的名字
typedef int MYINT
typedef struct {int x ; int y;} Point;
Point point;
//或
typedef struct
{
int x ;
int y;
} Point;
Point point;
//或
struct Point
{
int x ;
int y;
} ;
struct Point point;
- 指向结构体的指针与通过指针获取结构体元素
#include<stdio.h>
typedef struct
{
int x;
int y;
} Point;
int main()
{
Point point;
Point *p;//p为Point类型的指针或指向结构体(point)的指针
p = &point;//p指向结构体变量point
p->x = 1;//p->x 表p取x的值
p->y = 2;
printf("%d,%d",p->x,p->y);
return 0;
}
- 结构体的自引用结构
#include<stdio.h>
typedef struct Point //这里注意 : Point和下面第一个Point要一致,和第二个不一定要一样
{
int x;
int y;
struct Point* next;//next是指向当前结构体自身的指针
} Point;
int main()
{
Point p1, p2, p3;
Point* p;//p为指向结构体(Point)的指针
p1.x = 1; p1.y = 2;
p2.x = 3; p2.y = 4;
p3.x = 5; p3.y = 6;
p1.next = &p2;
p2.next = &p3;
p3.next = NULL;
for (p = &p1; p != NULL; p = p->next) {
printf("(%d,%d)\n",p->x,p->y);
//实现通过next指针来遍历几个结构体变量
}
return 0;
}
结构体和指针总结:
- 看到 。。。* 就是指针(也是变量,值是某个变量的地址),说的时候要说“指向。。。的指针”
- 结构体也是一个变量
六、申明、定义和初始化
6.1 申明和定义的区别
声明只是给变量、函数、结构体、联合体命名,表明程序有该变量、函数、结构体、联合体。
定义是具体给变量分配存储空间、给出函数的具体实现、指明结构体和联合体成员。
简单理解:如果程序中仅仅有声明,缺少定义实现,最终无法生成可执行的程序,因为信息不完整,无法完成编译全过程。
C语言中声明和定义的原则是:
声明可以出现多次,定义有且只能出现一次。
定义必须有,且只能出现一次。
声明和定义可以同时出现。
声明和定义可以分为以下几类:
变量的在声明时同时会定义(涵盖所有数据类型)
函数类型的声明和定义
结构体或联合体类型的声明或定义
数组类型的声明或定义
6.2 初始化
就是把变量赋为默认值,把控件设为默认状态,把没准备的准备好。