C语言问题 - 关于一维数组和二维数组用*a+i形式表达
问题
今天在编写程序时被一个语句搞懵了:
#include<stdio.h>int main()
{int *pa[6];int a[2][3] = {{1,2,3},{4,5,6}};int sum = 0;int i,j,k = 0;for (i=0; i<2; i++){for (j=0; j<3; j++){*(pa + k) = *(a + i) + j;k++;}}for (i=0; i<k; i++){printf("%d ", *(*(pa + i)));}printf("\n");return 0;
}
输出结果:
1 2 3 4 5 6
把我搞懵的是*(pa + k) = *(a + i) + j;
(其实真的很简单的道理还一直在纠结。。。)
其实这句话就是指(对等号左右边语句分别解释):
-
每次循环 pa+k都会让pa指针都会向下移动一格,而加上星号*就是为了取指针所指的值,而pa数组存放的都是指针,所以这里加 * 就是为了取得指针里存放的地址,最后整体的 *(pa+k) 也就是 pa[k] ,那么等号左边解释完了,到底这个地址是什么地址呢?
-
等号右边给了解释,a是数组a首地址,+i 不再是只移动一格,因为a是行指针,一次移动一行,所以a+0 时指针还在第一行原地, a+1 时指针已经到了第二行开头,而加上 * 以后的 *(a+i) 就是 取 a+i 地址的值,也就是 a[i] ,而a[i]具有特殊含义,因为它是二维数组的a[i],二维数组每一行的首地址,所以首地址再加上 j ,就是以列进行偏移,所以*(a+i)+j 就是数组a中元素的地址。
综上,等号左边的是指针数组pa中元素的地址,等号右边是数组a中元素的地址,把等号右边的值赋给左边,就是把数组a中的元素地址保存在指针数组pa中。
小结
对于一维数组来说 *(a+i) 和 a[i] 这是等价的,一定要注意分辨 *a+i 和 *(a+i) ,这俩可不一样噢!!!
假设有以下数组定义:
int a[5] = {1, 2, 3, 4, 5};
如果我们想访问数组中的第三个元素,即索引为2的元素,可以使用*(a+2)
或a[2]
。
示例1:使用*(a+2)
来访问数组元素:
int result = *(a + 2); // 等同于 int result = a[2];
printf("%d\n", result); // 输出:3
示例2:使用*a+2
来进行运算:
int result = *a + 2;
printf("%d\n", result); // 输出:3 (等同于 a[0] + 2)
在示例2中,*a
首先取得指向数组第一个元素的指针,即a[0]
的值为1。然后,将1与2相加得到3。
所以,*(a+2)
的结果是访问数组中索引为2的元素的值,而*a+2
的结果是将数组第一个元素的值与2相加。
相关文章:

C语言问题 - 关于一维数组和二维数组用*a+i形式表达
问题 今天在编写程序时被一个语句搞懵了: #include<stdio.h>int main() {int *pa[6];int a[2][3] {{1,2,3},{4,5,6}};int sum 0;int i,j,k 0;for (i0; i<2; i){for (j0; j<3; j){*(pa k) *(a i) j;k;}}for (i0; i<k; i){printf("%d &q…...

验证码识别DLL ,滑块识别SDK,OCR图片转文字,机器视觉找物品
验证码识别DLL ,滑块识别SDK 你们用过哪些OCR提取文字,识图DLL,比如Opencv,Labview机器视觉找物品之类?...

【图论】最小生成树的应用
一.题目 P1550 [USACO08OCT] Watering Hole G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 二.分析 1.我们是要使所有的农场都要有水 2.可以从起点引水,也可以互相引水。 3.费用要最小 这时我们可以想到最小生成树,建立一个虚拟节点即可。思路一…...

C++类模板的特化(三)
本文主要介绍类模板的特化、局部特化和缺省模板实参; 1.类模板的特化 类模板的特化(Class Template Specialization)是指为特定的模板参数提供自定义实现的过程。通过特化,我们可以针对某些特定的类型或条件提供不同的行为或实现…...

基于YOLOV8模型的课堂场景下人脸目标检测系统(PyTorch+Pyside6+YOLOv8模型)
摘要:基于YOLOV8模型的课堂场景下人脸目标检测系统可用于日常生活中检测与定位课堂场景下人脸,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检…...

java八股文面试[数据结构]——Map有哪些子类
知识来源: 【23版面试突击】 用过哪些Map类,都有什么区别,HashMap是线程安全的吗?_哔哩哔哩_bilibili https://www.cnblogs.com/bubbleboom/p/12694013.html...

司徒理财:8.23今日黄金原油走势分析附操作策略
黄金走势分析: 黄金下跌遇阻,短线开启震荡调整走势,但跌势依旧没有改变,没有突破1906压力前,还是偏空走势,反弹继续干空。趋势行情,不要轻言翻转!即便下跌结束,…...

使用动态IP是否会影响网络
今天我们要谈论的话题是关于动态IP和网络的关系。也许有些小伙伴对这个概念还比较陌生,但别担心,我会简单明了的给你理清楚。让我们一起看看动态IP到底能否影响到网络。 首先,我们先来搞明白什么是动态IP。在互联网世界中,每一个连…...

Linux学习笔记-常用指令说明
本文目录 一、Linux指令笔记 二、"授人以鱼,不如授人以渔" 一、Linux指令笔记 0、cd 命令是 change dir 的简写,它可以把终端当前所在的路径切换至目标路径。 1、mkdir 建立文件夹。是 make directory 的简写,它可以在文件系统中创建一个新的目…...

MyBatisPlus进阶版
1.映射 1.1自动映射 【1】表名和实体类名映射 -> 表名user 实体类名User 【2】字段名和实体类属性名映射 -> 字段名name 实体类属性名name 【3】字段名下划线命名方式和实体类属性小驼峰命名方式映射 -> 字段名 user_email 实体类属性名 userEmail MybatisPlus…...

安防视频云平台EasyNVR视频汇聚平台硬件无法进入服务器的问题处理方法
EasyNVR是基于RTSP/Onvif协议的视频接入、处理及分发的安防视频云平台,可提供的视频能力包括:设备接入、实时视频直播、录像、云存储、录像回放与检索、告警、级联等,平台可支持将接入的视频流进行全平台、全终端的分发,分发的视频…...

流媒体内容分发终极解决方案:当融合CDN与P2P视频交付结合
前言 随着互联网的发展,流媒体视频内容日趋增多,已经成为互联网信息的主要承载方式。相对传统的文字,图片等传统WEB应用,流媒体具有高数据量,高带宽、高访问量和高服务质量要求的特点,而现阶段互联网“尽力…...

根据源码,模拟实现 RabbitMQ - 内存数据管理(4)
目录 一、内存数据管理 1.1、需求分析 1.2、实现 MemoryDataCenter 类 1.2.1、ConcurrentHashMap 数据管理 1.2.2、封装交换机操作 1.2.3、封装队列操作 1.2.4、封装绑定操作 1.2.5、封装消息操作 1.2.6、封装未确认消息操作 1.2.7、封装恢复数据操作 一、内存数据管理…...

Apache Flume架构和原理
Apache Flume是一个开源的分布式、可靠的日志收集和聚合系统,旨在将大量的日志数据从不同的数据源(如应用程序、服务器、设备)收集到中心存储或数据湖中。Flume的架构设计允许用户在大规模数据流的情况下实现可靠的数据传输和处理。 Flume特性 Apache Flume是一个用于收集…...

代码随想录算法训练营day38 | LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
509. 斐波那契数(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台) 思路:经典的dp题。 int fib(int n){if(n 0 || n 1) return n;return fib(n-1) fib(n-2); } 70. 爬楼梯(题目…...

Linux基本指令【下】
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析3 目录 👉🏻cat👉🏻echo(输出…...

向量检索:基于ResNet预训练模型构建以图搜图系统
1 项目背景介绍 以图搜图是一种向量检索技术,通过上传一张图像来搜索并找到与之相关的其他图像或相关信息。以图搜图技术提供了一种更直观、更高效的信息检索方式。这种技术应用场景和价值非常广泛,经常会用在商品检索及购物、动植物识别、食品识别、知…...

SpringBoot 响应头添加版本号、打包项目后缀添加版本号和时间
文章目录 响应头添加版本号获取版本号添加响应处理器请求结果 打包项目后缀添加版本号和时间实现打包结果 响应头添加版本号 获取版本号 在 pom.xml 中,在 project.version 下定义版本号 在 application.yml 获取 pom.xml 中 project.version 中的信息 添加响应处…...

优化指南:带宽限制的可行策略
大家好!作为一名专业的爬虫程序员,我们经常面临的一个挑战就是带宽限制。尤其是在需要快速采集大量数据时,带宽限制成为了我们提升爬虫速度的一大阻碍。今天,我将和大家分享一些解决带宽限制的可行策略,希望能帮助大家…...

计算机提示mfc120u.dll缺失(找不到)怎么解决
在计算机领域,mfc120u.dll是一个重要的动态链接库文件。它包含了Microsoft Foundation Class (MFC) 库的特定版本,用于支持Windows操作系统中的应用程序开发。修复mfc120u.dll可能涉及到解决与该库相关的问题或错误。这可能包括程序崩溃、运行时错误或其…...

Java基于SpringBoot+Vue实现酒店客房管理系统(2.0 版本)
文章目录 一、前言介绍二、系统结构三、系统详细实现3.1用户信息管理3.2会员信息管理3.3客房信息管理3.4收藏客房管理3.5用户入住管理3.6客房清扫管理 四、部分核心代码 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云…...

微服务架构2.0--云原生时代
云原生 云原生(Cloud Native)是一种关注于在云环境中构建、部署和管理应用程序的方法和理念。云原生应用能够最大程度地利用云计算基础设施的优势,如弹性、自动化、可伸缩性和高可用性。这个概念涵盖了许多方面,包括架构、开发、…...

C++day2作业(2023.8.22)
1.定义一个学生的结构体,包含学生的姓名,年龄,成绩,性别,学生的成绩,姓名,定义为私有权限;定义一个学生类型的结构体变量,设置公有函数用于给学生的成绩和名字进行赋值&a…...

在 Spring Boot 中使用 OpenAI ChatGPT API
1、开始咯 我们来看看如何在 Spring Boot 中调用 OpenAI ChatGPT API。 我们将创建一个 Spring Boot 应用程序,该应用程序将通过调用 OpenAI ChatGPT API 生成对提示的响应。 2、OpenAI ChatGPT API 在开始具体讲解之前,让我们先探讨一下我们将在本教…...

【leetcode】225.用队列实现栈
分析: 队列遵循先入先出的原则,栈遵循后入先出的原则 也就是说,使用队列实现栈时,入队操作正常,但是出队要模拟出栈的操作,我们需要访问的是队尾的元素;题目允许使用两个队列,我们可…...

机器学习中XGBoost算法调参技巧
本文将详细解释XGBoost中十个最常用超参数的介绍,功能和值范围,及如何使用Optuna进行超参数调优。 对于XGBoost来说,默认的超参数是可以正常运行的,但是如果你想获得最佳的效果,那么就需要自行调整一些超参数来匹配你…...

第1章:计算机网络体系结构
文章目录 1.1 计算机网络 概述1.概念2.组成3.功能4.分类5.性能指标1.2 计算机网络 体系结构&参考模型1.分层结构2.协议、接口、服务3.ISO/OSI模型4.TCP/IP模型1.1 计算机网络 概述 1.概念 2.组成 1.组成部分&...

【Java 动态数据统计图】动态数据统计思路Demo(动态,排序,containsKey)三(115)
上代码: import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map;public class day10 {public static void main(String[] args) {List<Map<String,O…...

【游戏评测】河洛群侠传一周目玩后感
总游戏时长接近100小时,刚好一个月。 这两天费了点劲做了些成就,刷了等级,把最终决战做了。 总体感觉还是不错的。游戏是开放世界3D游戏,Unity引擎,瑕疵很多,但胜在剧情扎实,天赋系统、秘籍功法…...

java新特性之Lambda表达式
函数式编程 关注做什么,不关心是怎么实现的。为了实现该思想,java有了一种新的语法格式,Lambda表达式。Lambda本质是匿名内部类对象,是一个函数式接口。函数式接口表示接口内部只有一个抽象方法。使用该语法可以大大简化代码。 …...