指针第三章、几个特殊的指针

上一章中我们学到,指针数组是存储指针的数组,那么这一章我们将学习几个数组指针在内的几个特殊的指针

一、字符指针

在字符指针是我们经常使用的指针,我们一般使用:

对p解引用发现p内存储了w,还有另外一种方式:

但是*p没有存储整个字符串,而是将首字符的地址放到p里面,

 上面的意思是将首字符“h”的地址存到了p中。

《剑指offer》中有这样一道例题,这里str3和str4指向同一个常量字符串,c/c++会把一个常量字符串单独存储在一个内存区域。所以当指针指向同一个常量字符串的时候,实际上指向的是同一个内存,所以str3和str4是相等的。

用相同的字符串去初始化不同的数组,就会在内存空间单独开辟一块内存,所以str1和str2不相等。

二、数组指针 

指针数组是一种数组,内部储存了指针,那么数组指针是一个指针,指向一个数组。我们可以将二者进行对比,

int *p1[10];

int (*p2)[10];

p1是指针数组,p2是数组指针。p1先和[10]结合,表示p1的数组有十个元素,但是数组的这十个元素都是地址。p2是数组指针,指向一个数组,数组内有十个元素。

我们知道了数组指针的格式,就得存储在数组指针变量中:

int  arr[10] = {0};

int (*p)[10] = &arr;

p和&arr得到的结果是一致的,都是arr的地址。其中int 代表p指向的数组的元素类型,p是数组指针的变量名,[10]是p指向数组的元素个数。 

 三、二维数组传参的本质

这是正常的写法,将二维数组的数组名和行列数分别传给函数,但是我们也可以通过指针来完成。

 

数组在内存当中连续存放,二维数组在指针当中也是连续存放,所以 找到初始位置之后向后继续寻找位置即可,然后对其解引用。

四、函数指针

数组指针是指向数组的指针,那么函数指针就是指向函数的指针。

我们看到函数也是有地址的,既然函数有地址就可以通过指针来表示

我们把函数的地址存放起来就要创建函数指针变量,函数指针的写法和数组指针非常类似,写法如下:

我们拿其中一个来举例:

 int (*pf3)(int,int) = add;

int 代表pf3指向的类型;

(*pf3)是函数指针的变量名;

两个int 是对函数的参数和个数的交代; 

实例:

 

 

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值