7.9——7.17

C语言操作符详解(1)7.9

操作符和表达式

算数操作符

/除号得到的是商

%模得到的是余数

Double浮点数

移位操作符

>>右移位

  1. 算术右移(计算机常用)

右边丢弃,左边补原符号位

  1. 逻辑右移

右边丢弃,左边补零

原码,反码,补码

左移操作符

左边丢弃,右边补零

没有右移-1位

位操作符

&  按位与 (按二进制位)

|  按位或

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

不创建临时变量交换数值,加减法(超出最大值,可能会溢出)

进一步,用异或

赋值操作符

创建时给值是初始化

复合赋值符

+=

>>=

单目操作符

A+b  双目操作符

Int a = 0;

If(a)

{

Printf(“hehe”)

}

If(!a)

{

Printf(“haha”)

}

*p解引用操作符

C语言操作符详解(2)7.10.2021

Sizeof也是单目操作符

Short内存2

~按位取反   灵便成一,一变零

++

--

前置和后置

(强制类型转换)

关系操作符

逻辑操作符

与 &&

或  ||

(看真假)

条件操作符

Exp1 ? exp2:exp3

1真走2,假走3

逗号表达式

下标引用,函数调用,结构成员操作符

[]

()

结构体

Struct stu

{

Char name[20];

Int age;

}

打印%s  字符

结构体,成员变量

整形提升

属性

  1. 优先级
  2. 结合性
  3. 是否控制求值顺序

指针(1)

指针是什么?

指针就是地址

指针类型决定指针接引用访问空间大小。

决定了指针的步长

Char 1

Int   4

Double  8

野指针:指针位置不可知

指针(2)7.12.2021

Int *p;

*p=20;

1.未初始化

2.越界访问

3.空间释放

Int* p = null

指针相减是中间元素个数

指针的关系运算

指针和数组

数组名是首元素地址

1.&arr表示整个地址

2.Sizeof(arr)表示整个数组

一级指针,二级指针。。。。。。

指针数组  存放指针是数组  int*arr2【3】= {&a,&b,&c};

数组指针  

作业讲解(1)(2)

(最好再看看)

初始结构体

值的结合,成员变量

结构体关键字  结构体标签

Typedef  命名为stu

结构体成员访问

打印结构体数据

Print1(s);

print2(&s);

结构体传参

实用调试技巧

一切事情都有迹可循

  1. 发现错误
  2. 隔离,消除等方法定位
  3. 确定原因
  4. 提出方法
  5. 重新测试

Debug版本的可执行程序    可以调试

release版本的可执行程序    不可调试,带优化

7.13.2021

断点  F9

F10逐过程

F11逐语句

调试的代码没有语法问题

栈区

局部变量,函数参数

堆区

动态内存分配的

静态区

静态变量,全局变量

栈区的使用

1.先使用高地址空间,后用低地址空间(局部变量)

2.数组随着下标增长,地址由低到高变化

#include<assert.h>

Assert();断言

Const  不能改

编译型错误

链接错误(函数未定义)

运行时错误

数据的储存(1)7.15.2021

C语言类型

  1. 内置类型

整形

Char1

Unsigned char(0——255)

signed char(-128——127)

Short2

unnsigned short

signed short

Int4

Unsigned int

signed int

Long

Unsigned long

signed long

Long long

Float4(单精度浮点型)

Double8(双精度浮点型)

  1. 自定义类型

构造类型

数组类型

结构体类型

枚举类型

联合类型

指针类型

空类型

Void三个用法

有符号数(整形)有三种表示方法 原码,反码,补码(无符号数三者相同)

一个字节8比特位

原码,用二进制写出来,正数原码,反码,补码相同

负数除符号位取反得反码,反码+1得补码。

整数存放是存放补码

整数

  1. 有符号数

正数

负数

  1. 无符号数

大小端介绍(字节序)

大端存储模式:数据的低位保存在内存的高地址中,数据的高位,保存在内存的低地址中。

小端存储模式:数据的低位保存在内存的低地址中,数据的高位,保存在内存的高地址中。

为什么要有大小端

(char*)强制转换

指针类型的意义

访问几个字节,+1向后跳几个

-1补码全1

%d打印十进制有符号数字

%u打印十进制无符号数字

数据的储存(4)

浮点型的储存

%f浮点型能拿出来

(-1)^S*M*2^E

(-1)^S表示符号位

M表示有效数字,大雨等于1,小于2 。

2^E表示指数位

1   8     23

取出分三种情况

E不为全0/1,减去127,得到真实值

E为全0,E为-126

E为全1,无穷大。

指针详解(1)指针的进阶

九个指针

指针4/8个字节

“abcdef”常量字符串

《剑指offer》

指针数组用来存放指针。

Int* parr[4]存放整形指针的数组

Char* parr[4]存放字符指针的数组

指针详解(2)7.17.2021

数组指针:是指针,存放数组的地址,指向数组的指针。

Int(*pa)[5] =&arr

Arr首元素

&arr[0]数组首元素

&arr数组地址

(*p)

二维数组首元素是一列。

数组参数,指针参数

一维数组传参

二维数组传参

指针传参

函数指针:指向函数的指针

&add和add都是函数的地址

Int (*pa)(int,int) =add;

指针详解(4)

(*(void(*)())0)();

()0强制类型转换//调用0地址的函数

C陷阱和缺陷

函数指针的解应用

函数指针数组(转移表)

Int(*parr[10])();

回调函数

指针详解(6)

指针数组

Int* arr[10];

数组指针

Int*(*Pa)[10]=&arr;

函数指针

int(*parr)(int,int)=Add;

函数指针的数组

Int(*parr[5])(int,int)

指向数组指针的指针

Int(*(*pparr)[5])(int,int)

冒泡排序两两相邻的比较

一趟冒泡排序

Qsort  库函数  排序

Void* 无类型指针,可以接受任意类型的地址。

不能加减操作

不能接引用‘

字符串不能直接><=比较。

Qsort(s,sz,sizeof(s[0]),cmp-stu-by-name);

第一个参数中:待排序数组的首元素地址

第二个参数:待排序数组元素个数

第三个参数:待排序数组的每个元素大小   单位是字节

第四个参数:是函数指针,比较两个元素的所用函数的地址(操作者自己实现)

函数指针的两个参数是:待比较的两个元素的地址。

指针详解(8)

一维数组练习

地址大小是4或者8字节

Sizeof求所占空间大小

Strlen是字符串长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学c的长弓狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值