尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C语言指针与数组深度解析2(详细易理解)
浮世尘弦个人主页⭐个人专栏《C语言》、《数据结构与算法》、《C》非淡薄无以明志非宁静无以致远文章目录一深入理解数组名二使用指针访问数组三一维数组传参的本质四冒泡排序五二级指针六指针数组七字符指针变量八数组指针变量1定义2表示3数组指针的初始化九二维数组传参的本质1剖析二维数组2运用展示十函数指针变量十一关键字typedef1,typedef的定义和运用2,typedef和define的区别十二函数指针数组1定义2运用十三转移表一深入理解数组名1引出问题通过上述代码可知arr确实是首元素的地址但是在sizeof中的arr又表示出了40个字节这就又表示arr代表的是整个数组产生了矛盾。结论说数组名就是地址是正确的。不过有两个例外1.sizeof(arr)此时arr表示的是整个数组的大小2arr,此时代表的是arr整个数组的地址通过下面的分析由上图可知arr和arr[0]都代表着数组首元素的地址所以他们加1时地址改变一个整型变量的大小 但是arr表示的是整个数组的地址所以在加1时直接跳过了40个字节一个整型占4个字节。只是由于会选取最小的一个进行表示故arr可以表示首元素的地址。二使用指针访问数组由arr[i] *(arri)得*iarr)i[arr] 注意i[arr]也可以但是不建议使用因为会影响代码的可读性。总结1数组就是数组是一块连续的空间大小取决于数组内元素的个数和元素的类型2指针(变量)就是指针(变量)是一个变量大小为4/8个字节3数组名是地址是首元素的地址。4,可以使用指针来访问数组。三一维数组传参的本质总结1数组传参时传入的是首元素的地址产生了传址调用因此形参和实参是同一个数组不会创建新的地址。2形参的数组是不会再创建地址空间的所以形参的数组是可以忽略掉数组的大小写成arr[ ]3一维数组传参时形参可以写成数组形式也可以写成指针形式。四冒泡排序冒泡排序的核心思想是对相邻两个元素进行比较,然后进行排序。分析对一个数组内的元素进行排序例如数组内元素为 10 9 8 7 6 5 4 3 2 1按照升序的方式排列1 2 3 4 5 6 7 8 9 10我们需要先选取10和9两个元素进行比较在交换两个元素的位置依次往下进行当遍历完数组内所有元素后变为9 8 7 6 5 4 3 2 1 10。接着我们需要重复上述过程总共进行遍历9次得到升序数组。代码实现五二级指针二级指针就是指针变量的地址结果为0 //**pp两次解引用为a *pp一次解引用为pint*表示pp指向对象的类型*表示pp为一个指针变量p1跳过4个字节取决于p的类型pp1跳过4或8个字节取决于是x64还是x86)在确定环境下指针的大小是不变的。六指针数组指针数组的本质是数组数组内的元素为指针变量。运用七字符指针变量两种字符指针1接收数组内容可变。2接收常量字符串内容不可变。打印结果wbcdefwbcdefabcdef补充char* ps abcdef可更改为const char* ps abcdef,这样出现*ps更改时可以直接拦截,并在编译器中报错。例题输出结果not samesame分析srt1和str2是创建的两个不同的数组虽然内容一样但是首元素的地址不一样同时两个都可以进行更改故不相同。首先arr1和arr2表示的是首元素的地址arr1和arr2指向的是同一个字符串常量这个常量字符串被储存在一个地址中不可更改。故相同。八数组指针变量1定义类比整形指针变量int* print:指针存放的地址是整型变量的地址能够指向数据。数组指针变量本质上是一种指针存放的是数组的地址不是数组首元素的地址能够指向数组。2表示int* p1[10] //指针数组本质上是数组数组内存放的是地址int (*p2)[10] //数组指针本质上是指针理解由于的优先级比[]高使得*和p2进行结合。故*p2可以表示指针去掉*p2)剩下的部分int表示指针指向的是一个整形数组类型[10]数组内储存的元素的个数为103数组指针的初始化int *p2) [10] arr; //arr可以表示整个数组的地址。九二维数组传参的本质1剖析二维数组二维数组可以看成每个元素都是一个一维数组的数组。换一种解读arr[3][5]前面的arr[i]表示的是数组的每一行后面的[5]表示的是每一行一维数组中的各个元素。可以把每一行当作数组中的每一个元素我们知道数组在传参时传入的是首元素的地址又因为二维数组的首元素是一个数组所以要接收它就要用到数组指针变量int (*p)[10]。2运用展示分析形参可以传二维数组arr[3][5]也可以传数组指针int(*p1)[5]本质上都是数组首元素的地址即第一行的地址。十函数指针变量1函数的地址函数是有地址的函数名就是函数的地址其次函数名这种形式也可以表示函数的地址。如果想要将函数的地址存储起来并运用的话就要创建一个指针来接收它这个指针就是函数指针变量。类比数组指针引出函数指针数组指针int (*p1)[10]函数指针 int (*p2)(int x,int y) add分析p2中存放的是函数的地址 int表示函数的返回类型int x,int y)表示函数的参数可省略为int,int).add表示函数的地址可省略为add.2运用分析ps和*ps)都可以表示地址分析复杂调用12十一关键字typedef1,typedef的定义和运用typedef的作用是用来重命名的可以将复杂的类型进行简化。展示2,typedef和define的区别typedef int* nrt#define NRT_T int*nrt p1,p2p1和p2都是指针变量NRT_T p3,p4p3是指针变量p4是整型变量原因替换后 int*p3 p4 故只有p3是指针变量十二函数指针数组1定义把一个函数的地址放到数组中这个数组就叫做函数指针数组。语法int (*parr[4])(int,int) {add,,sub,mul,div};parr[4]表示数组parr是数组名[4]是数组的个数。int(*)(int,int)表示是函数指针类型。{}内的是同类型的不同的函数名。2运用十三转移表模拟实现计算机主调函数分析让arr[5]数组的首元素为0第一可以使得arr[input]中的input和数组进行正确匹配。二是可以补充输入0的情况。中间调用函数回调函数回调函数就是通过函数指针调用的函数。把一个函数的指针作为参数传递给另一个函数另一个函数在使用这个指针时所调用的函数就是回调函数。主调函数把函数的指针传给中间调用函数中间调用函数利用函数指针找到回调函数对回调函数进行操作再返回内容到主调函数中。转移表通过函数指针的方式实现了对不同函数相似操作降低了函数一个一个进行相似操作而带来的代码冗余节省了空间。
RELATED

相关推荐

c++面向对象之对象的赋值详解

c++面向对象之对象的赋值详解

对象初始化:构造函数和复制构造函数在设计一个类时,往往要设计构造函数。一般对象的初始化使用构造函数初始化,如果没有构造函数则会使用默认构造函数。还可以用复制构造函数来通过一个已有对象初始化一个新的对象。设计一个类来表现对象的初…

📅 2026/10/4 11:53:02
C++中各种初始化方式示例详解

C++中各种初始化方式示例详解

本文主要给大家介绍了关于C初始化方式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。C小实验测试:下面程序中main函数里a.a和b.b的输出值是多少?1234567891011121314151617181920212223#…

📅 2026/10/4 11:53:02
C++11中long long类型的具体使用

C++11中long long类型的具体使用

、引言在计算机编程的世界里,整数类型是最基础且常用的数据类型之一。随着计算机技术的不断发展,处理大规模数据和进行高精度计算的需求日益增长,传统的整数类型如int和long在表示范围上逐渐显得力不从心。为了满足这一需求,C11标…

📅 2026/10/4 11:53:02
MORE NEWS

更多资讯

📰

STM32H7+LAN8720A以太网调试实战:从PHY寄存器到LWIP稳定百兆

从PHY寄存器读回来全是0xFFFF,到局域网里能稳定跑到接近100M带宽,这块STM32H7加LAN8720A的网口前前后后折腾了我挺长时间。作为这个系列文章的最后一篇,我把ETH外设和LWIP协议栈配置过程中踩过的坑、排查思路、最终怎么解决的,按实…

📰

从零搭建OpenRig开放式硬件平台:散热、走线与避坑全指南

第一次听说 OpenRig,我还停留在“电脑必须装进机箱才算成品”的旧观念里。直到一块高功耗显卡的散热问题反复折腾我:机箱散热结构看着厚实,可显卡背板的热空气始终排不出去,侧板摸上去都能煎蛋。后来我干脆把整套硬件从机箱里搬出…

📰

ESD防静电烘箱全流程解析:从静电防护到调试交付

今天打包发走一台ESD防静电烘箱,发货前照例拍了几张照片,客户在微信里说了一句“设备到了我们直接上线用”,这比什么验收报告都实在。这台设备的订单不算大,但沟通的时间挺长。客户是做新能源电控板代工的,车间里贴着E…

📰

51单片机驱动SYN6288实现倒车雷达语音播报实战

做倒车雷达课程设计那会儿,学弟拿着题目来找我,说要实现障碍物距离语音播报。我第一反应是搞个MP3模块,去网上找“一米二”“两米三”的现成录音——结果试了两天就放弃了,这种动态数字根本没法穷举。后来换思路,盯上了…

📰

Gazebo仿真中Controller Spawner找不到controller_manager的排查指南

这条信息我太熟了——只要你在 Gazebo 里跑过 ros_control 的仿真,十有八九都见过下面这行:[WARN] : Controller Spawner couldnt find the expected controller_manager ROS interface.配上一路往下滚的报错,机器人模型要么瘫在地上一动不动…

📰

3月28日今日AI分享:把 Cursor Base URL 改到 TaoToken 的完整配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬