初识指针(4)<C语言>

前言

前面的文章,已经对指针的基础概念以及运用有了初步了解,我们可以进一步探究指针比较深入的知识,下文将主要介绍:使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。

目录

指针数组模拟二维数组

字符指针变量

数组指针

二维数组传参的本质

函数指针

typedef关键字


指针数组模拟二维数组

前文我们已经学习了指针数组,即存放指针的数组,而数组名就是一个指针,那么是否能够通过指针数组完成对多个数组的存放并输出呢?


字符指针变量

字符指针通常有两种情况,++第一种指向单个字符的,第二种指向一个字符串的。++前者很好理解,指向单个字符,那么这个指针中存放的就是这个字符的地址。那么指向一个字符串的呢,它指向的地址是首字母的地址,还是整个字符串的地址?

本质上存放的是首元素的地址,但是它的访问权限是到字符串的最后一个字符,不会受到指针运算的影响。

下面给出一道经典题深入理解字符指针

在上图可以清楚的看到两个数组是不相同的,很好理解,两个数组哪怕元素完全一致,数组名不同,都不相同。

但是两个字符指针是相等的,在c/c++中会有一个专门的区域来存放字符串,避免造成空间的浪费,所以哪怕两个字符指针名不一样,只要它们指向的字符串是一样的,它们就相等。


数组指针

数组指针即指向数组的指针,前文我们已经说过,数组名即是首元素的地址,要想取整个数组的地址应该用**&数组名**


二维数组传参的本质

前文我们已经学过一维数组传参的本质是一个地址,这也就是在传参时数组大小为什么可以被省略的原因,那么二维数组在传参时,是否也一样呢?

答案是肯定的,传的就是首元素的地址,也就是第一排的地址。

这个二维数组3行5列,且为int型4字节,每行20字节,当传参时第一排地址被传过去,+1时跳过20字节(一排的地址长度),所以我们的结论正确。


函数指针

话说C语言中,万物皆地址,函数也有地址,我们能否通过一个函数指针来接收函数地址呢,是否能够通过函数指针完成对函数的引用呢?

可以看到其实函数名就是地址,&函数名与函数名是完全等价的,函数指针与数组指针类似,都要保证指针名与*的先结合,其他部分就是函数的类型了。


typedef关键字

typedefg关键字的作用就是给类型重命名,简单化。

如将unsigned int重命名为unit

值得注意的是当对数组指针与函数指针进行重命名时,一定要把别名放在*右边。

如将int (*)(int,int)重命名为p

Respect!

相关推荐
Ulyanov2 分钟前
PyVista与Tkinter桌面级3D可视化应用实战
开发语言·前端·python·3d·信息可视化·tkinter·gui开发
和你一起去月球6 分钟前
动手学Agent应用开发(TS/JS 最简实践指南)
开发语言·javascript·ecmascript·agent·mcp
好大哥呀14 分钟前
Java 中的 Spring 框架
java·开发语言·spring
charlie11451419117 分钟前
输入法处理杂谈——Windows 下的 IMM32 输入法处理机制和Chrome如何桥接TSF输入法
开发语言·chrome·windows·学习·输入法
froginwe1118 分钟前
Ruby Dir 类和方法
开发语言
代码游侠18 分钟前
学习笔记——ARM Cortex-A 裸机开发实战指南
linux·运维·开发语言·前端·arm开发·笔记
星火开发设计21 分钟前
表达式与语句:C++ 程序的执行逻辑基础
java·开发语言·c++·学习·知识·表达式
纵有疾風起22 分钟前
【Linux 系统开发】基础开发工具详解:软件包管理器、编辑器。编译器开发实战
linux·服务器·开发语言·经验分享·bash·shell
郝学胜-神的一滴29 分钟前
Qt与Web混合编程:CEF与QCefView深度解析
开发语言·前端·javascript·c++·qt·程序人生·软件构建
冬奇Lab31 分钟前
【Kotlin系列08】泛型进阶:从型变到具体化类型参数的类型安全之旅
android·开发语言·windows·安全·kotlin