【C语言__指针02__复习篇12】

目录

前言

一、数组名的理解 

二、使用指针访问数组

三、一维数组传参的本质 

四、冒泡排序

五、二级指针

六、指针数组

七、指针数组模拟二维数组


前言

本篇主要讨论以下问题:

1. 数组名通常表示什么,有哪两种例外情况,在例外情况中数组名表示什么

2. 知道使用指针访问数组其实就是指针+-整数和指针解引用的应用

3. 知道 arr[i] 本质是 *(arr+i),即数组首元素的地址偏移后进行解引用

4. 一维数组传参的本质是什么,形参部分究竟有没有创建新的数组,数组的大小是否作为参数传递给被调函数以及为什么

5. 冒泡排序的规则是怎样的,怎样写一个冒泡排序

6. 什么是二级指针

7. 什么是指针数组

8. 怎样用指针数组模拟二维数组

一、数组名的理解 

1. 数组名通常表示数组首元素地址 (也可以理解为数组名是一个指针变量,里面存放着数组首元素的地址)。

2. 两个例外情况:

    ① sizeof(数组名):sizeof中单独放数组名,这里的数组名表示整个数组,sizeof计算的是整个数组的大小,单位是字节。

    ② &数组名:这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址数值上一样,但本身是有区别的,&数组名的指针类型是什么呢,后面会讲)

 

二、使用指针访问数组

上图中,指针p就是arr,arr[i]表示的本质就是*(arr + i),由加法交换律可得arr[i] == i[arr]。 

三、一维数组传参的本质 

1. 在数组传参的时候,传递的是数组名,也就是说数组传参本质上传递的是数组⾸元素的地址,也正是如此,在被调函数内部是没办法求得数组的元素个数的,因此在数组传参时通常会把数组的大小也一并传给被调函数。

2. ⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式,但无论写成哪种形式,形参部分表示的都是一个指针,而不是数组 (形参部分并不会创建一个数组)。

四、冒泡排序

#include <stdio.h>
//用冒泡排序把一个整型数组排为升序
//冒泡排序:让相邻的两个元素比较,如果不满足顺序就交换
//每趟冒泡排序可以搞定"最后一个位置"上放的元素,sz个元素sz-1趟就能搞定
//每搞定一趟,最高比较的下标要-1
void BubbleSorrt(int arr[], int sz)
{//趟数int i = 0;for (i = 0; i < sz - 1; i++){int flag = 1;//假设本趟本身就全为升序//一趟冒泡排序int j = 0;for (j = 0; j < sz - i - 1; j++){if (arr[j] > arr[j + 1]){int tmp = 0;tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = 0;//有交换,本趟一定不为全升序}}if (flag){break;}}
}void Print(int arr[], int sz)
{for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}
}int main()
{int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };//降序int sz = sizeof(arr) / sizeof(arr[0]);BubbleSorrt(arr, sz);Print(arr, sz);return 0;
}

五、二级指针

1. 二级指针是用来存放一级指针地址的指针变量。

2. 对二级指针解引用就可以找到其所指向的一级指针,对一级指针解引用就可以找到其所指向的变量。

 

六、指针数组

1.存放指针的数组叫指针数组,指针数组的每个元素都是相同类型的指针变量。

   例如,int* arr[10];、char* arr[5];、char** arr[8];

七、指针数组模拟二维数组

1. arr是数组arr首元素的地址,让arr偏移并解引用就可以找到arr数组中的每个元素,而arr数组中的每个元素是其他数组首元素的地址,对该地址偏移并解引用就可以找到数组arr1、arr2、arr3中的每个元素。

2. arr[0] == *(arr + 0) -->找到数组arr1首元素的地址,arr[0][0] == *(*(arr + 0) + 0),找到arr1中第一个元素。

    arr[1] == *(arr + 1) -->找到数组arr2首元素的地址,arr[1][0] == *(*(arr + 1) + 0),找到arr2中第一个元素。

    arr[2] == *(arr + 2) -->找到数组arr3首元素的地址,arr[2][0] == *(*(arr + 2) + 0),找到arr3中第一个元素。

  本篇文章已完结,谢谢支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我用ADAU1467加5个ADAU1772,做20进10出的音频处理板(七):音量调节的更多例程

作者的话 ADAU1467是现阶段ADI支持最多通道的ADAU音频DSP&#xff0c;他配合外部的AD/DA&#xff0c;可以实现最多32路音频通道&#xff0c;接了一个小项目&#xff0c;我拿它做了一块20进10出的板&#xff0c;10个MIC/LINE输入,10个LINE IN输入&#xff0c;10个HPOUT&#xf…

贪心算法在单位时间任务调度问题中的应用

贪心算法在单位时间任务调度问题中的应用 一、引言二、问题描述与算法设计三、算法证明四、算法实现与效率分析五、C语言实现示例六、结论 一、引言 单位时间任务调度问题是一类经典的优化问题&#xff0c;旨在分配任务到不同的时间槽中&#xff0c;使得某种性能指标达到最优。…

Git和Github绑定

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Qt 菜单栏上手教程:QMenuBar QMenu QToolbar

引言 在Qt框架中&#xff0c;QMenuBar、QMenu、QToolbar和QAction都是用于构建应用程序界面中的用户交互元素。 QMenuBar 是什么&#xff1a;QMenuBar是一个用于创建横向菜单栏的类。在桌面应用程序中&#xff0c;它通常位于窗口的顶部。应用场景&#xff1a;当您需要一个包含…

关于Spring事务管理之默认事务间调用问题

由事务的传播行为我们知道, 如果将方法配置为默认事务REQUIRED在执行过程中Spring会为其新启事务REQUIRES_NEW, 作为一个独立事务来执行. 由此存在一个问题。 如果使用不慎, 会引发org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back bec…

新技术前沿-2024-大型语言模型LLM的本地化部署

参考快速入门LLM 参考究竟什么是神经网络 1 深度学习 1.1 神经网络和深度学习 神经网络是一种模拟人脑神经元工作方式的机器学习算法,也是深度学习算法的基本构成块。神经网络由多个相互连接的节点(也称为神经元或人工神经元)组成,这些节点被组织成层次结构。通过训练,…

系统思考—啤酒游戏

最近有不少的合作伙伴来询问我啤酒游戏这个来自于MIT&#xff08;麻省理工学院&#xff09;经典的沙盘&#xff0c;上周刚刚结束Midea旗下的一家公司市场运营部《啤酒游戏沙盘-应对动态性复杂的系统思考智慧》的课程。 参与这次沙盘体验的团队成员深刻体会到了全局思考的重要性…

javascript(第三篇)原型、原型链、继承问题,使用 es5、es6实现继承,一网打尽所有面试题

没错这是一道【去哪儿】的面试题目&#xff0c;手写一个 es5 的继承&#xff0c;我又没有回答上来&#xff0c;很惭愧&#xff0c;我就只知道 es5 中可以使用原型链实现继承&#xff0c;但是代码一行也写不出来。 关于 js 的继承&#xff0c;是在面试中除了【 this 指针、命名提…

如何配置googleplay谷歌后台的Auth登陆和支付权限

相信很多谷歌开发者在谷歌平台发布过app产品,如果你接入过登陆和支付,那么你对下面的后台配置步骤以及服务器如何使用这些参数来进行校验并不陌生,这篇文章我将分享给大家关于如何在后台配置你上架应用的登陆权限和支付权限,服务器端如何使用相应的参数来做验证。 配置谷歌…

动态创建运行时Java Bean

基于Java字节码技术&#xff0c;如ASM、Javassist&#xff0c;前者偏底层、构建复杂&#xff0c;但性能相对较高&#xff1b;后者提供了友好的API接口方法&#xff0c;优雅简单&#xff0c;但性能稍弱。 本文基于Javassist&#xff0c;初探性以创建一个简单的类、里面创建一个…

利用Spring中的SchedulingConfigurer实现数据库配置化定时任务

目录 1.利用Scheduled来实现传统的定时任务 2.两者的区别 3.Spring中的SchedulingConfigurer来拓展定时任务的灵活性 1&#xff09;UrTaskConfig 2&#xff09;TaskMain 3&#xff09;BaseTask 4&#xff09;效果 &#xff08;1&#xff09;插入配置定时任务的sql语句 …

【webrtc】Chrome和Firefox在SDP协商过程中,针对localhost的不同处理

内网下chrome端webrtc协商失败 现象 我有一个webrtc服务器在局域网内&#xff0c;使用chrome浏览器访问时&#xff0c;发现webrtc在做媒体协商时失败。 具体表现是&#xff0c;在交换sdp后&#xff0c;ice的状态是oniceconnectionstatechange: failed 但是换成Firefox浏览器…

广东理工学院携手泰迪智能科技成功部署人工智能实验室

广东理工学院是经国家教育部批准设立的全日制普通本科院校&#xff0c;入选全国应用型人才培养工程培养基地、国家级众创空间试点单位、广东省高校电子商务人才孵化基地。开设34个本科专业&#xff0c;涵盖工学、经济学、管理学、文学、艺术学、教育学等6大学科门类&#xff0c…

docker容器技术篇:容器集群管理实战mesos+zookeeper+marathon(一)

容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; mesos概述 1.1 Mesos是什么 Apache Mesos 是一个基于多资源调度的集群管理软件&#xff0c;提供了有效的、跨分布式应用或框架的资源隔离和共享&#xff0c;可以运行 Hadoop、Spark以及docker等。 1.2 为…

自然语言处理: 第二十八章大模型基底之llama3

项目地址: meta-llama/llama3: The official Meta Llama 3 GitHub site 前言 LLaMa系列一直是人们关注的焦点&#xff0c;Meta在4月18日发布了其最新大型语言模型 LLaMA 3。该模型将被集成到其虚拟助手Meta AI中。Meta自称8B和70B的LLaMA 3是当今 8B 和 70B 参数规模的最佳模…

npm install 卡在still idealTree buildDeps不动

前言 再使用npm install 安装包依赖时 发现一直卡住 停留在 观察node_cache下的_logs文件 发现一直在拉取包 37 silly idealTree buildDeps 38 silly fetch manifest riophae/vue-treeselect0.4.0尝试解决 尝试设置了taobao镜像源 依然如此 获取已经设置的镜像源 确实是ta…

图像哈希:全局+局部提取特征

文章信息 作者&#xff1a;梁小平&#xff0c;唐振军期刊&#xff1a;ACM Trans. Multimedia Comput. Commun. Appl&#xff08;三区&#xff09;题目&#xff1a;Robust Hashing via Global and Local Invariant Features for Image Copy Detection 目的、实验步骤及结论 目…

学习Rust的第10天:枚举和模式匹配

今天我们来看看一个类似的概念 enums 。 Enums: We saw that in Rust, enums are data types that list possible values, giving a simple and type-safe mechanism to describe alternatives. We looked at how to create enums and use them to represent similar possibili…

webpack中mode、NODE_ENV、DefinePlugin、cross-env的使用

本文讲的全部知识点&#xff0c;都是和webpack相关的。如果你之前有疑问&#xff0c;那本文一定能帮你搞清楚。 问题来源一般是类似下面代码&#xff08;webpack.json中&#xff09;&#xff1a; "scripts": {"dev": "cross-env NODE_ENVdevelopmen…

opencv android 使用笔记

目录 获取app路径&#xff1a; 下载&#xff1a;OpenCV-android-sdk cmakelist配置&#xff1a; 头文件路径&#xff1a; 编译报错&#xff1a;clang: error: linker command failed with exit code 1 (use -v to see invocation) 读取图片例子 保存mp4 获取app路径&am…