2021-10-15

操作符

位操作符:

&(按位与) 两个位都为1时,结果才为1

| (按位或) 两个位都为0时,结果才为0

^(按位异或) 两个位相同为0,相异为1

赋值操作符:

=, +=, -=, *=, /=, &=, ^=, |=, >>=, <<=

a = a+5 —— a += 5

a = a-3 —— a -=3

算术操作符:

+ - * / %

移位操作符:>>(右移操作符) <<(左移操作符)

int a = 9/2; float a = 9/2; float a = 9/2.0;

单目操作符:

只有1个操作数的操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)语法:

{

int a = 10;

printf(“%d\n”, sizeof(int));

printf(“%d\n”,sizeof a);

括号可以省略表示不是函数, 但一般不会省略

int arr[10] = {0};

printf (“%d\n”, sizeof(arr));

--40:计算的是数组的总大小, 单位是字节 printf (“%d\n”, sizeof(arr[0]));

计算数组大小: int sz = sizeof(arr)/sizeof(arr[0]

}

~ 对一个数的二进制按位取反把,所有二进制位中的数字,1变成0,0变成1

语法:

{

int a = 0; printf(“%d\n”, ~a);

整数a

0 二进制:

00000000000000000000000000000000

1111111111111111111111111111111111111 为何输出的结果是-1?

整数(负数)在内存中存储的是补码

一个整数的二进制表示有3种(以-1为例):

原码: 10000000000000000000000000000001

反码: 1111111111111111111111111111111111110(符号位不变,其他按位取反)

补码: 1111111111111111111111111111111111111(反码+1)

整数(正数)原码、反码、补码相同 

1、所有正整数的按位取反是其本身+1的负数;

2、所有负整数的按位取反是其本身+1的绝对值;

3、零的按位取反是-1(0在数学界既不是正数也不是负数)

}

-- 前置、后置--

++ 前置、后置++

{

语法:

int a = 10; int b = a++;//后置++,先使用,后++

printf(“%d\n”, b);

printf(“%d\n”, a);

语法: int a = 10; int b = ++a;//前置++,先++,后使用

printf(“%d\n”, b);

printf(“%d\n”, a); ++ 前置、后置++ 

}

(类型) 强制类型转换

{

#include

int main()

        {

        int a = 3.14;----int a =(int)3.14;//强制类型转换

        printf("%d\n", a);

        return 0;

        }

//warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据

}

关系操作符:

{

>, >=, <, <=, !=(用于测试不相等), ==(用于测试相等)

}

逻辑操作符

{

&& 逻辑与 || 逻辑

}

* 间接访问操作符(解引用操作符)

条件操作符

{

exp1 ? exp2 : exp3

max = a > b ? a : b

int main()

         {

         int a = 3;

        int b = 7;

        int max = 0;

        if (a>b)

        {

                max = a;

         }

        else

         {

                 max = b;

        }        

        max = a > b ? a : b;

        printf("%d", max);

        return 0;

         }

逗号表达式

{

exp1,exp2,exp3 … expN

int main()

{

        int a = 3;

        int b = 7;

        int c = 0;

        int d = (a = b - c, b = c + a, c = a - b);//结果为最后一个的结果

        printf("%d", d);

        return 0;

下标引用、函数调用和结构成员

{

[] () . ->

[]:下标引用操作符

int arr[10] = {1,2,3,4,5,6,7,8,9,10}

printf(“%d\n”, arr[5] ); //[ ]下标引用操作符

():函数调用操作符

printf(“hehe\n”)//()函数调用操作符

//调用函数的时候,函数名后边的()就是函数调用操作符

}

关键字

{

1.定义:c语言提供的,不能自己创建的,为关键字。比如int、return

2.变量名不能是关键字(int int)

常见关键字: auto:自动变量关键字 --> 每个局部变量都是auto修饰的

int main() {

        {

                 int a = 10;

                //进大括号时创建,出大括号时销毁

                //自动创建,自动销毁的 – 自动变量

                 //本身前面都应该有auto,由于局部变量都有auto,所以基本都省略

         }

{

常见关键字:

{

break:循环里的跳出关键词,while:循环关键词

case:switch语句中的情况关键词,如星期一,case(星期一)

continue:循环语句,

If:如果,

else:其他,

for:循环,

switch:循环,

default: 默认,

do:do—while循环,

goto:无条件转移关键词

char:字符类型,

float:单精度浮点型,

double:双精度浮点型,

int:整型,

long:长整型,

short:短整型,

signed:有符号(10,-20),

unsigned(%u): 无符号

const:常变量,enum,枚举关键字,

extern:外部变量申明符号,

register:寄存器变量关键词//寄存器的处理速度非常快,因此大量,频繁使用的 数据,放到寄存器中,提升效率

return:返回值函数,

sizeof:求字符串长度,

struct:结构体关键字

union:联合体(共用体)关键字

void:空关键字,volatile:自行了解(听说面试官爱问)

define是不是关键字?No -- 预处理指令

include 是不是关键字? No -- 预处理指令

typedef:类型定义

typedef:顾名思义是类型定义,这里应该理解为类型重命名。

//将unsigned int 重命名为u_int, 所以u_int也是一个类型名 typedef unsigned int u_int;

//(大名:李四——>小名:小四)

int main()

{

        unsigned int num = 100;

         u_int num2 = 100;//与上面一模一样的意思

        return 0;

}

static:静态的

用法:

1.Static修饰局部变量

2.Static修饰全局变量

3.Static修饰函数

void test()

{

int a = 1;

a++; printf("%d\n", a);

}

int main()

{

int i = 0;

while (i < 10)

{

test(); i++;

}

return 0;

}

void test()

{

static int a = 1;

a++;

printf("%d\n", a);

}

int main()

{

int i = 0;

while (i < 10)

{

test();

i++;

}

return 0;

}

static修饰局部变量,静态变量修饰符

void test()                                                

{

static int a = 1;

a++;

printf("%d\n", a);

}

int main()

{

int i = 0;

while (i < 10)

{

test();

i++;

}

return 0;

static修饰后的局部变量,出了函数(大括号)后不销 毁,意味着局部变量生命周期变长了

static修饰局部变量,改变了局部变量的生命周期(本 质上是改变了变量的存储类型)

栈区 (局部变量 函数的参数)

堆区( 动态内存分配的)

静态区 (全局变量 static修饰的 静态变量 )

内存 (局部变量 函数的参数,动态内存分配的,全局变量 static修饰的 静态变量)

程序不结束,生命不结束

main.c

extern int gol_a;

int main()

{

printf("%d\n", gol_a);

return 0;

}

add.c

int gol_a = 2021;

static int gol_a = 2021;

static修饰全局变量,是的这个全局变量 只能在自己所在的源文件(.c)内部可 以使用!

其他源文件不能使用!

全局变量,在其他源文件内部可以被使用是因为全局变量具有外部链接属性 。

但被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了!

main.c

extern int Add(int x,int y);

int main()

{

int a = Add(i, k);

printf("%d", a);

return 0;

}

add.c

(static)  int Add(int x, int y)

{

return x + y;

}

static修饰函数,使得函数只能在自己的 所在的源文件内部使用,不能在其他源 文件内部使用。 本质上:static是将函数的外部链接数学 变成了内部链接属性(和static修饰全局 变量一样)

define 是一个预处理指令

1.define定义符号

#define MAX 1000

int main()

{

printf("%d\n", MAX);

return 0;

}

2.define定义宏

宏在C语言中是一段有名称的代码片段。无论何时使用到这个宏,宏的内容都会 被这段代码替换掉。

#define 代码名称 代码内容 #

define ADD(X,Y) X+Y----#define ADD(X,Y) ((X)+(Y)  

#define Printf printf("Hello world!\n")

int main()

{

Printf;

int sum = 5*ADD(5, 4); ----sum = 5*5+4

printf("%d\n", sum); return 0;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值