【C语言进阶】进阶指针

这篇博客深入探讨了C语言中的指针知识,包括地址的产生、字符指针、指针数组、数组指针的使用(如数组名与数组指针的区别)、函数指针、函数指针数组和回调函数的应用。还特别提到了void*无具体类型的指针的特性和使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、引言

经过一段的学习,我们已经大致掌握了C语言的基础,接下来就是更加深入的了解C语言的知识,今天这篇博客是对指针知识的进阶。

2、知识回顾

1、指针就是一个变量,用来存放地址,地址可以唯一访问一块空间
2、指针的大小为4/8个字节,32位bit的机器就是4个字节,64位bit为8个字节
3、指针有类型,指针类型决定了解引用操作时指针的权限

3、地址的产生

1、首先我们都知道电脑中存在CPU这个硬件

CPU会产生虚拟地址
32位虚拟地址空间 -> 32bit位的地址
64位虚拟地址空间 -> 64bit位的地址

CPU产生虚拟地址之后,会转换为物理地址,由物理地址访问内存中的区域

4、字符指针

在这里插入图片描述
在这里插入图片描述

5、指针数组

整型指针数组应用
在这里插入图片描述
字符指针数组
在这里插入图片描述

6、数组指针

数组指针是指向数组的指针

int* p1[10];//p1与[]先结合,所以*p1是指针数组
int (*p2)[10];//p2与*先结合,所以*p2是数组指针

6.1、数组名

首先我们要知道 arr 和 &arr 分别表示什么意思呢?
在这里插入图片描述
从图中的代码对比我们可以得到结果
1、arr表示数组首元素地址,所以整型数组 int arr[10] 的首元素地址 arr+1 后跳过一个整型大小,也就是4个字节

2、而 &arr 表示将数组的地址存放起来,放在数组指针 int ( * ) [ 10 ]中,数组的地址+1,跳过整个数组大小,所以跳过40个字节

6.2、数组指针如何使用

在这里插入图片描述

int (*parr3[10])[5];//parr3和[]结合,说明parr3是一个数组,数组有10个元素
//每个元素的类型是int(*)[5],是一种数组指针
//该类型指针指向的数组有5个int类型的元素

下面举一个数组指针运用的例子
在这里插入图片描述
虽然可以这么写,但实际操作中并不值得提倡
接下来是数组指针的正确用法
在这里插入图片描述

6.3、数组传参、指针传参

1、一维数组传参
(一)数组传参的时候,形参写成数组的形式是可以的,同时形参数组可以不用规定大小

(二)本质上数组传参的时候,传的是数组名,数组名相当于首元素地址,所以形参部分可以写成指针(举例)

void test(int *arr[20])//或(int **arr)
{
   }
int main()
{
   
   int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值