指针知识点梳理及回顾(待更新)

一、1.内存与地址

        2.指针变量和地址

        3.指针变量类型的意义

        4.const修饰指针

        5.指针运算

        6.野指针

        7.assert断言

        8.指针的使用和传址调用

1.内存与地址

常见内存单位:
1 byte = 8 bit                            

1 KB = 1024 byte                

1MB = 1024KB

1GB = 1024MB

1 TB = 1024 GB

1 PB = 1024 TB

内存单元编号==地址==指针

2.指针变量与地址

1.取地址操作符(&)

&a可理解为:为变量a开辟一份内存空间(==地址==指针)用来存放变量a

2.解引用操作符(*)

通过(&)我们拿到的是地址,(*)以为从地址中提出

      可理解为&就是将钱存入ATM机,*就是取出钱,ATM机就是那份空间

3.如何看指针类型

3.指针变量类型的意义

例如:char*l类型的指针  指针变量+1可以跳过1个字节

          int*类型的指针   指针变量可以跳过4个字节

          且塔曼的访问权限不一样即一次性可以访问多少个字节

void*指针类型可以方便泛型编程,使一个函数可以处理多个类型的数据

  4.const修饰指针

const起到“固定的作用”,,当你不想让某个人修改某一变量时可以使用const

修饰指针时

* const p     意为不允许修改p中存放的地址

const * p 和 * const p是一样的     意为不允许修改*p所指向的变量

    5.指针运算

指针+-整数

指针-指针

指针的关系运算

6.野指针

1.野指针成因:指针未初始化    指针越界访问   指针指向的空间释放

1.规避野指针:指针初始化(给指针赋值NULL)   小心指针越界访问    及时置NULL,检查使用之前的有效性    避免返回局部变量地址(这点容易忘)

7.assert断言

#define NDEBUG//宏定义 预处理
#include<assert.h>//assert的头文件名
assert(p !=NULL)//如果p!=NULL为假就执行接下来的代码,否则报错,程序终止,并告知第几行有问题,对程序员友好

8.指针的使用和传址调用

1.传值调用与传址调用

传值调用会开辟新的内存空间,形参只是实参的临时拷贝

传址调用会将地址传到函数中去,可供直接使用

Add:编者个人认为重要的点:
 

1.数组名是数组首元素的地址

2.gets()相比scanf读取数据可以忽略空格

3.strcpy();字符串拷贝(后拷前)

4.strncat();字符串拼接(有限)

5.strcat();字符串拼接(全)

6.strstr();字符串查找

7.arr[i]==*(arr+i)    arr[i][j]==*(*(arr+i)+j)

8.int(*p)[10]//是指针指向一个数组,是指针

9.*&arr==arr

10.函数名==&函数名

11.//函数声明

    void(*signal( int, void(*)(int)  )  )(int);

    //可理解为:

    //void(*)(int) signal(int, void(*)(int))           //err

12.typedef      重命名

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值