python做h5网站,广州 餐饮 网站建设,网站开发与维护的工资,南宁网站推广系统1. 内存和地址
2. 指针变量和地址
3. 指针变量类型的意义
4. const修饰指针
5. 指针运算
6. 野指针
7. assert断⾔
8. 指针的使⽤和传址调⽤
1. 内存和地址
1.1 内存
计算机内存空间如何高效率的管理#xff1f;
也是把内存划分为⼀个个的内存单元#xff0c;每个…1. 内存和地址
2. 指针变量和地址
3. 指针变量类型的意义
4. const修饰指针
5. 指针运算
6. 野指针
7. assert断⾔
8. 指针的使⽤和传址调⽤
1. 内存和地址
1.1 内存
计算机内存空间如何高效率的管理
也是把内存划分为⼀个个的内存单元每个内存单元的⼤⼩取1个字节
⼀个⽐特位可以存储⼀个2进制的位1或者0
1byte字节 8bit比特位)
1KB 1024byte
1MB 1024KB
1GB 1024MB
1TB 1024GB
1PB 1024TB 内存单元的编号地址指针
1.2 究竟该如何理解编址
CPU访问内存中的某个字节空间必须知道这个 字节空间在内存的什么位置⽽因为内存中字节 很多所以需要给内存进⾏编址
2. 指针变量和地址
2.1 取地址操作符 如果想要获得a的地址就要输入a 2.2 指针变量和解引⽤操作符* 那我们通过取地址操作符()拿到的地址是⼀个数值如果需要存的话要将这个数放在指针变量中
指针变量也是⼀种变量这种变量就是⽤来存放地址的存放在指针变量中的值都会理解为地址
2.2.2 如何拆解指针类型
比如
int a 10;
int * pa a;
这⾥pa左边写的是 int*类型的对象。 * 是在说明pa是指针变量⽽前⾯的 int 是在说明pa指向的是整型(int)
2.2.3 解引⽤操作符
当我们需要用到这个指针变量时可以用解引⽤操作符(*)
如 *pa 的意思就是通过pa中存放的地址找到指向的空间 *pa其实就是a变量了所以*pa0这个操作符是把a改成了0
2.3 指针变量的⼤⼩ 32位平台下地址是32个bit位指针变量⼤⼩是4个字节
64位平台下地址是64个bit位指针变量⼤⼩是8个字节
注意 指针变量的⼤⼩和类型是⽆关的只要指针类型的变量在相同的平台下⼤⼩都是相同的
3. 指针变量类型的意义
3.1 指针的解引⽤ 对比两个代码发现int*类型会将n的4个字节全部改为0但是char*类型只是将n的第⼀个字节改为0
指针的类型决定了对指针解引⽤的时候有多⼤的权限⼀次能操作⼏个字节
3.2 指针-整数 char* 类型的指针变量1跳过1个字节 int* 类型的指针变量1跳过了4个字节
3.3 void* 指针 这一段代码执行后会报出一个警告 使用void* ⼀般 v oid* 类型的指针是使⽤在函数参数的部分⽤来接收不同类型数据的地址
4. const修饰指针
4.1 const修饰变量 这里可以发现const加上后 n的值不能被修改
但是可以通过修改n的地址去修改它的值
如 4.2 const修饰指针变量 5. 指针运算
指针的基本运算有三种分别是
1. 指针-整数
2.指针-指针
3.指针的关系运算
5.1 指针-整数 5.2 指针-指针 5.3 指针的关系运算 6. 野指针
概念野指针就是指针指向的位置是不可知的随机的、不正确的、没有明确限制的
6.1 野指针成因
1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 6.2 如何规避野指针
1. 指针初始化 2.⼩⼼指针越界 3.指针变量不再使⽤时及时置NULL指针使⽤之前检查有效性
4.避免返回局部变量的地址
7. assert断⾔
assert.h 头⽂件定义了宏 assert() ⽤于在运⾏时确保程序符合指定条件如果不符合就报 错终⽌运⾏。这个宏常常被称为“断⾔”
如 如果p不等于0程序继续运⾏否则就会终⽌运⾏并且给出报错信息提⽰
如果需要使用assert则需要加上#includeassert.h
如果已经确认程序没有问 题不需要再做断⾔就在 #includeassert.h 语句的前⾯定义⼀个宏 NDEBUG 8. 指针的使用和传址调用
8.1 strlen的模拟实现
库函数strlen的功能是求字符串⻓度统计的是字符串中 8.2 传值调用和传址调用
举例写⼀个函数交换两个整型变量的值 按照之前思维编写后发现有误。
在Add(int x,int y )的时候
a和b的值都给了xy
且x和y也交换了。在Add函数内部交换x和y的值不会影响a和b。当Add函数调⽤结束后回到main函数a和b的没法交换。Add函数在使⽤ 的时候是把变量本⾝直接传递给了函数这种调⽤函数的⽅式我们之前在函数的时候就知道了这 种叫 传值调用。
结论 实参传递给形参的时候形参会单独创建⼀份临时空间来接收实参对形参的修改不影响实 参。
修改代码 我们可以看到实现成Swap2的⽅式顺利完成了任务这⾥调⽤Swap2函数的时候是将变量的地址传 递给了函数这种函数调⽤⽅式叫传址调用 传址调⽤可以让函数和主调函数之间建⽴真正的联系在函数内部可以修改主调函数中的变量所 以未来函数中只是需要主调函数中的变量值来实现计算就可以采⽤传值调⽤。如果函数内部要修改 主调函数中的变量的值就需要传址调⽤