指针(便于快速复习)

引言:

指针是什么?

指针的本质就是地址

为了形象理解,若把变量a当作人,内存当作人住的房间,而地址(也就是指针)就是门牌号,寻找a也就可以通过找门牌号来寻找。

  

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

1.指针变量与地址 

1.1取地址操作符(&)

我们已经知道了指针代表的地址,那我们如何得到这个地址呢?

因此 我们引入&

int a=10;
&a;

1.2指针变量与解引用操作符(*)

1.2.1指针变量

将地址取出来之后存放在哪里呢?即答:指针变量中。

int a=10;
int *p=&a;

p就称为指针变量。顾名思义,变量——>可以改变的量

我们可以像a=10样把地址赋给p

1.2.2解引用操作符*

那么,知道地址后如何找到指向的对象呢?

此时我们引入解引用操作符*

int a=10;
int *p=&a;
*p=10;

可以通过改变*p来改变a

1.3指针变量的大小

32位平台————>X86(4字节)

64位平台————>X64 (8字节)

指针大小与类型无关,在相同平台下,大小相等。

1.4指针变量类型的意义

1.4.1指针变量的类型

指针变量类型是用于表示指针指向对象的类型。

如:

int *p=0;
char *pa='A';

1.4.2指针的解引用

对以下代码:

int n = 1000;
char* p = (char*)&n;
*p = 0;

结果如下:

原因是:char*类型  *p 只能访问1个字节

               int*类型  *p 能访问4个字节

总结:

类型决定了对指针解引用时的权限(能存放几个字节)

1.4.3 void*指针

void* p(泛型指针) 

对其强制类型转化有多种用法

多用于函数参数部分使函数可以处理多种类型的数据

1.5 const修饰指针

int const *p--->限制*p,但p可以改变

int * const p--->限制p,但*p可以改变

const  * const p--->均不可以改变

1.6指针运算

*  指针+-整数---->与类型有关

*  指针-指针---->所求是元素之间的个数

*  指针关系运算---->是关于地址存放位置的比较

1.7野指针

野指针:指针指向的位置是随机未知的

如:未初始化 越界访问 指针指向的空间释放~等等

那么,如何规避野指针呢?

可以进行指针初始化

int *p=NULL;

1.8assert 断言

头文件 <assert.h>

assert(p!=NULL);

 p!=NULL  程序运行,否则报错

2.数组指针

CSDN

3.二级指针

int a=10;
int *p=&a;
int **pp=&p;

*pp=p   

**pp=a 

4.指针数组

CSDN

5.函数指针

存放函数地址,可以通过地址调用函数

int          (*pf3)         (int x, int y)
|                |                     |
|                |                     |
|                |                    pf3指向函数的参数类型和个数的交代
|            函数指针变量名
pf3指向函数的返回类型

 通过函数指针调用函数

6.函数指针数组

本质:数组

数组的元素为函数的地址

如:int (*p[3])(int x,int y)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值