目录
1.函数
int Add(int x, int y) {
int z = x + y;
return z;
}
int main() {
int num1=10, num2=20, sum, a=100, b=200;
sum = Add(num1,num2);//Add() -- 函数调用操作符
sum = Add(a, b);
}
函数的特点就是简化代码,代码重复使用
2.数组
int main(){
//数组如何定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
arr[0];
printf("%d\n", arr[0]);
printf("----------\n");
//通过while循环打印arr数组里面的元素
int i = 0;
while (i < 10) {
printf("%d\n", arr[i]);
i++;
}
return 0;
}
数组的定义:一组相同类型元素的集合。通过下标访问数组里面的元素。[] :下标引用操作符,数组里面的元素都有一个下标,下标是从0开始的
3.操作符
(1)算术操作符
int main(){
int a1 = 5 / 2;//取商 -- 2
printf("%d\n",a1);
int a2 = 5 % 2;//取模 -- 1
printf("%d\n", a2);
return 0;
}
(2)移位操作符
int main() {
int a = 1;
//整型1占4个字节-- 32个bit位 -- 00000000000000000000000000000001
int b = a >> 1;
printf("%d\n", b);
printf("%d\n", a);
return 0;
}
包含“左移 -- <<”、“右移 -- >>”
注意:移位是移二进制位
(3)按位操作符
int main() {
int a = 3;
int b = 5;
int c = a & b;
printf("%d\n", c);
int d = a | b;
printf("%d\n", d);
int e = a ^ b;
printf("%d\n", e);
return 0;
}
按位是按二进制位。符号包括“& -- 按位与”、“| -- 按位或(按<2进制>位取反)”、“^ -- 按位异或”。
&:取二进制位相交的数。|:取二进制位不相交的数。^:对应的二进制位相同,则为0;对应的二进制位相异,则为1。
(4)赋值操作符
int main() {
int a = 10;
a = 20;
a &= 2;
return 0;
}
其中:“ = ” -- 赋值,== : 判断相等。另外还有复合赋值符,比如:+=、-=、*=、/=、&=、|=、^=
(5)单目运算符:只对一个变量进行操作
int main(){
int a1 = 1;
int b1 = a1++;//后置++,先使用,再++。“a++”只对a一个变量进行了操作
printf("a1 = %d b1 = %d\n ", a1, b1);//a=2,b=1
int a2 = 1;
int b2 = ++a2;//后置++,先++,再使用。
printf("a2 = %d b2 = %d\n ", a2, b2);//a=2,b=2
int c = 0;//4字节 -- 32bit位
int d = ~c;//c是有符号的整型 --- ~按(2进制)位取反
printf("%d\n",d);//使用的、打印的是这个数的原码 -- -1
return 0;
}
只要是整数,在内存中存储的都是二进制的补码。负数在内存中存储的时候,存储的是二进制的补码。正数的原码、反码、补码 相同。
原码->补码过程:原码符号位不变,其他位按位取反得到反码。反码加1得到补码
例如:1000000000000000000000000000000010 --- -2的原码
11111111111111111111111111111101 -- 反码 -- 符号位不变,其他位按位取反
11111111111111111111111111111110 -- 补码 -- 反码加一
补码->原码过程:补码减一得到反码。反码符号位不变,其他位按位取反得到原码
例如:1(符号位:1表示负数,0表示正数)1111111111111111111111111111111 -- 补码 // -1的补码
11111111111111111111111111111110 -- 这是反码 -- 补码减一
10000000000000000000000000000001 -- 这是原码 -- 反码按位取反
(6)双目运算符:对两个变量进行操作
int main(){
int a = 1, b = 2, c;
c = a + b;//“c = a + b”则是对a, b两个变量进行了操作
return 0;
}
(7)三目运算符(条件操作符):对三个变量进行操作
代码符号:? --- 代码表达式:exp1 ? exp2 : exp3
int main(){
//例子:
double money = 100.39;
double price = 66.96;
printf("买不买呢:");
printf("%s\n", price<=money ? "买了" : "不买");
//price<=money ? "买了":"不买" = if (price<=money)
printf("买了");
else
printf("不买");
return 0;
}
(8)关系操作符 -- 代码符号:> 、>= 、< 、<= 、!=(用于测试“不相等”) 、 ==(用于测试“相等”)
(9)逻辑操作符 -- 代码符号:&&(逻辑与)、||(逻辑或)
int main() {
//真 -- 非0,假 -- 0
int a = 0;
int b = 5;
int c = a & b;
printf("%d\n", c);// 0
int d = a || b;
printf("%d\n", d);// 1
return 0;
}
逻辑与:有一个假即为假,两个为真才为真。逻辑或:有一个真即为真,两个为假才为假
4.关键字
包括:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、goto、if、while、long、int、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile*
typedef:类型重定义 -- 类型重命名
int main() {
typedef unsigned int u_int;
unsigned int num1 = -20;
u_int num2 = -20;
printf("num1 = %d num2 = %d\n", num1, num2);
return 0;
}
viod -- 无类型
void test(){
int a = 1;
a++;
printf("a = %d\n", a);
}
int main() {
int i = 0;
while (i < 5) {
test();
i++;
}
return 0;
}
static:静态 -- 作用1:修饰局部变量,是局部变量生命周期变长。
void test(){
static int a = 1; //a是一个静态局部变量
a++;
printf("a = %d\n", a);
}
int main() {
int i = 0;
while (i < 5) {
test();
i++;
}
return 0;
}
static:静态 -- 作用2:修饰全局变量,使变量的作用域发生改变 -- 让静态的全局变量只能在当前变量源文件内使用
static int g_val = 2022; //全局变量
int main(){
//extern -- 声明外部变量
extern int g_val;
printf("%d\n", g_val);
return 0;
}
static:静态 -- 作用3:修饰函数,改变了函数的链接属性(普通的函数有外部链接属性) -- static是函数变成内部函数 --static修饰的函数只能在当前变量源文件内使用
static int Add(int x,int y) { //定义Add函数
int z = x + y;
return z;
}
int main() {
int a = 10;
int b = 20;
extern int Add(int,int); //声明外部函数
int sum = Add(a, b);
printf("sum = %d\n", sum);
return 0;
}
5. #define定义常量和宏
(1)定义常量
#define MAX 100
int main() {
int a = MAX;
printf("%d\n", a);
return 0;
}
(2)#define定义宏 -- 带参数
#define MAX(X,Y) (X>Y ? X:Y)
int main() {
int a = 10;
int b = 20;
int max;
max = MAX(a, b);// --> max = (a>b ? a:b)
printf("MAX = %d\n", max);
return 0;
}
6.指针
int main() {
int a = 10;// a --> 4个字节
printf("%p\n", &a);//& -->取地址符号
//指针变量 -- 用来存放地址的变量
int* p = &a;//取地址
printf("%p\n", p);
*p = 20;// *:解引用操作符
printf("a = %d\n", a);
return 0;
}