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

前言

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

目录

指针数组模拟二维数组

字符指针变量

数组指针

二维数组传参的本质

函数指针

typedef关键字


指针数组模拟二维数组

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


字符指针变量

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

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

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

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

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


数组指针

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


二维数组传参的本质

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

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

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


函数指针

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

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


typedef关键字

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

如将unsigned int重命名为unit

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

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

Respect!

相关推荐
Wenweno0o12 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming66612 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
qq_3395548212 小时前
英飞凌ModusToolbox环境搭建
c语言·eclipse
cch891812 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳13 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发13 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense13 小时前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎13 小时前
STL 栈 队列
开发语言·c++
勿忘,瞬间13 小时前
数据结构—顺序表
java·开发语言
张張40813 小时前
(域格)环境搭建和编译
c语言·开发语言·python·ai