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

前言

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

目录

指针数组模拟二维数组

字符指针变量

数组指针

二维数组传参的本质

函数指针

typedef关键字


指针数组模拟二维数组

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


字符指针变量

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

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

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

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

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


数组指针

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


二维数组传参的本质

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

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

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


函数指针

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

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


typedef关键字

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

如将unsigned int重命名为unit

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

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

Respect!

相关推荐
子牙老师7 分钟前
从零手写gdb调试器
c语言·linux内核·gdb·调试器
偶尔的鼠标人17 分钟前
Avalonia DataGrid 控件的LostFocus事件会多次触发
开发语言·c#
晚风残19 分钟前
【C++ Primer】第十二章:动态内存管理
开发语言·c++·c++ primer
_extraordinary_34 分钟前
Java Spring日志
java·开发语言·spring
小莞尔1 小时前
【51单片机】【protues仿真】基于51单片机主从串行通信系统
c语言·单片机·嵌入式硬件·物联网·51单片机
初圣魔门首席弟子1 小时前
【C++ 学习】单词统计器:从 “代码乱炖” 到 “清晰可品” 的复习笔记
开发语言·c++
Hello_Embed1 小时前
STM32 环境监测项目笔记(一):DHT11 温湿度传感器原理与驱动实现
c语言·笔记·stm32·单片机·嵌入式软件
lsx2024061 小时前
SQL UPDATE 语句详解
开发语言
郝学胜-神的一滴1 小时前
计算机图形学中的光照模型:从基础到现代技术
开发语言·c++·程序人生·图形渲染
lly2024062 小时前
PostgreSQL 表达式
开发语言