两类较难理解的指针

两类较难理解的指针

我们通过对取地址操作符(&)拿到的地址是一个数值,我们将这个数值存放在指针变量中,

例如:

指针变量也是一种变量,这种变量是用来存放地址的

此时我们看到指针变量的类型为int* 其中*代表该变量为指针变量,前面的int则代表变量pa指向的是int类型的变量。

那么如果指针变量存放的不是int类型的变量而是其它类型的该怎么去定义呢?

但是有一种特殊类型的指针是void*类型,我们可以理解为无具体类型的指针,它可以接受任意类型的地址,但是它也有一定的局限性,就是不能进行+-整数和解引用(*)操作的运算

我们可以看到,将一个int整型变量的地址赋值给char*类型的指针变量,编译器给出了警告,原因是类型不兼容,而使用void*就没有警告。

此时,我们对void*变量进行解引用操作

因此编译器无法用void*类型的指针直接进行计算。

数组指针:

顾名思义,其代表的意思为指向数组的指针

定义的方式为:int (*p)[10];

解释:*先和p进行结合,用来说明p是一个指针变量,指向的是一个有十个元素的整型数组。因此p是一个数组指针。

在这里,&与*都是向右结合的,但是[]的优先级要高于*,所以必须用()来保证*与p进行结合

否则定义出来的结果为int *p[10],它被称作指针数组,数组中有是个元素,元素的类型为指针,指向的是int类型。

数组指针变量如何进行初始化

如果要存放整个数组的地址,那么就要放在数组指针变量当中

如下:

函数指针

根据整形指针,字符指针,数组指针的定义进行类比,可以得出,函数指针就代表指向函数的指针,存储的是函数的地址,之后可以通过函数的地址来调用函数。

其中我们把函数地址打印出来也可以看出,函数名代表的函数的地址

利用函数指针来进行调用:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值