尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C语言指针(3)
目录1. 数组名的理解2. 使⽤指针访问数组3. ⼀维数组传参的本质4. 冒泡排序5. ⼆级指针6. 指针数组7. 指针数组模拟⼆维数组1. 数组名的理解对于数组名arr而言当它不以sizeof(arr)或arr的形式出现时arr都相当于arr[0]。当arr以sizeof(arr)或arr的形式出现时arr代表的是整个数组sizeof(arr)表示整个数组的长度arr表示取整个数组的地址。intarr[10]{1,2,3,4,5,6,7,8,9};printf(%p,arr);printf(%p\n,arr1);//地址数值比arr[0]多4printf(%p\n,arr1);//地址数值比arr[0]多是402. 使⽤指针访问数组#includestdio.hintmain(){intarr[10]{0};inti0;intszsizeof(arr)/sizeof(arr[0]);int*parr;for(i0;isz;i){scanf(%d,pi);//或者scanf(%d,arri);}for(i0;isz;i){printf(%d,*(pi));//或者printf(%d,*(arri));}}因为parrarr[0],所以在上述代码中他们访问数组是等效的。因为arrp都是首元素地址所以p与arr在此次等效的所以我们可以使⽤arr[i]访问数组的元素也可以用p[i]访问数组也就是说arr[i]在这里等价于p[i]。for(i0;isz;i){printf(%d,*(pi));//或者printf(%d,p[i]);}将*(pi)换成p[i]也是能够正常打印的所以本质上p[i]是等价于*(pi)。同理arr[i] 应该等价于*(arri)。数组元素的访问在编译器处理的时候也是转换成⾸元素的地址偏移量求出元素的地址然后解引⽤来访问的。3. ⼀维数组传参的本质数组名是数组⾸元素的地址那么在数组传参的时候传递的是数组名也就是说本质上数组传参传递的是数组⾸元素的地址。因为参数传递的是地址所以函数参数本质上是指针所以⼀维数组传参形参的部分可以写成数组的形式也可以写成指针的形式。#includestdio.hvoidtest(intarr[])//void test (int* arr){printf(%d\n,sizeof(arr));}intmain(){intarr[0]{1,2,3,4,5,6,7,8,9,10};test(arr);return0;}数组传参给函数时会发生数组降级变为指针的现象。4. 冒泡排序将一堆数字两两进行比较从小到大或从大到小进行排序。#includestdio.hvoidbubble_sort(intarr[],intsz){inti0;for(i0;isz;i){intflag1;for(intj0;jsz;j){if(arr[j]arr[j1]){flag0;inttmp0;tmparr[j1];arr[j1]arr[j];arr[j]temp}}if(flag1)break;}}intmain(){intarr[]{3,1,7,2,5,3,6,,4};intszsizeof(arr)/sizeof(arr[0]);bubble_sort(arr,sz);inti0;for(i0;isz;i){printf(%d,arr[i]);}return0;}5. ⼆级指针int a10; int* paa; int**ppap指针用来存放变量地址但是指针变量本身也有地址它也能存在指针中一级指针变量地址存在二级指针变量中二级指针变量地址存在三级指针变量中但是三级指针变量已经很少用了。图片来源比特6. 指针数组指针数组也是数组是存放指针变量的数组。int arr1[3]{0,1,2}; int arr2[3]{4,5,6} char arr[3]{0,1,3}; int *arr[3]{arr1,arr2};指针数组存放的是数组首元素地址。7. 指针数组模拟⼆维数组#includestdio.hintmain(){intarr1[4]{1,2,3,4};intarr2[4]{5,6,7,8};intarr3[4]{9,10,11,12};int*arr[3]{arr1,arr2,arr3};for(inti0;i3;i){for(intj0;j4;j){printf(%d,arr[i][j]);}printf(\n);}return0;}它模拟二维数组但是并非二维数组,二维数组是一个整体,而模拟的数组是三个数组的组合。
RELATED

相关推荐

B站视频解析3步走:一个PHP工具帮你快速拿到视频直链

B站视频解析3步走:一个PHP工具帮你快速拿到视频直链

B站视频解析3步走:一个PHP工具帮你快速拿到视频直链 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 上周,一位做短视频账号的朋友找我诉苦:收藏夹里存了两百多个B站…

📅 2026/10/27 12:52:07
DDrawCompat 快速上手完整指南:让老 DirectX 游戏在现代 Windows 上重获新生

DDrawCompat 快速上手完整指南:让老 DirectX 游戏在现代 Windows 上重获新生

DDrawCompat 快速上手完整指南:让老 DirectX 游戏在现代 Windows 上重获新生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com…

📅 2026/9/24 20:43:46
IPXWrapper 完整教程:让依赖 IPX/SPX 的老游戏在现代 Windows 重新联机

IPXWrapper 完整教程:让依赖 IPX/SPX 的老游戏在现代 Windows 重新联机

IPXWrapper 完整教程:让依赖 IPX/SPX 的老游戏在现代 Windows 重新联机 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 周五晚上,我和老同学约好打《红色警戒2》。两台电脑都装了游戏,连在同一…

📅 2026/10/6 18:29:49
MORE NEWS

更多资讯

📰

OpenCV多角度多尺度模板匹配技术详解

1. 多角度多尺度模板匹配技术解析 在工业视觉检测、医学影像分析等领域,我们经常需要从复杂背景中定位特定目标物体。传统模板匹配方法存在两大痛点:一是目标可能出现任意旋转角度,二是目标尺寸可能发生缩放变化。这正是多角度多尺度模板匹配…

📰

Windows本地Flink CDC实现MySQL实时同步实战指南

1. 为什么要在 Windows 上折腾 Flink 与 MySQL 同步 很多做数据处理的同行一听到“Flink 跑在 Windows 上”,第一反应是皱眉头——生产环境清一色 Linux,本地搞 Windows 图什么?我最初也是这个态度,直到实际带过几个项目之后才发现…

📰

零基础转型AI大模型:四阶段实战路线图

1. 项目概述:零基础程序员如何系统转型AI大模型领域 去年我帮团队里三位Java后端开发成功转型成大模型算法工程师,完整走通了从编程基础到工业级落地的全流程。这个四阶段学习路线图就是根据实战经验提炼的黄金路径,特别适合有编程基础但缺乏…

📰

基于MySQL的图书管理系统实战:从建表到借书事务与并发控制

简介:这份资源是面向高校学生与数据库初学者的MySQL图书管理系统课程设计完整包,可作为数据库期末大作业的参考实现。系统围绕图书表、读者表、管理员表、借阅表与逾期处罚表五类核心数据表展开,实现了借还书流程、模糊查询以及按权限区分用户…

📰

Camunda工作流邮件通知实战:Mail Task与JavaDelegate委托详解

工作流引擎跑到生产环境之后,业务方提的需求里十有八九会冒出一条:某个审批节点要通过邮件通知到人。Camunda 本身把「发邮件」这件事做成了引擎内置的一等公民,但真到落地的时候,坑往往不在「能不能发出去」,而在「模…

📰

Apache SeaTunnel二次开发实战与生态解析

1. 从Meetup看Apache SeaTunnel的生态活力 上周参加完本地技术社区的Meetup活动,对Apache SeaTunnel这个开源数据集成工具又有了新的认识。作为一款源自国内的开源项目,SeaTunnel在近两年快速崛起,已经成为大数据领域不可忽视的力量。活动现场…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬