C语言如何实现⼆级指针对⼆维数组的操作?

embedded/2024/10/18 18:24:36/

一、问题

        如何操作⼆维数组?

二、解笞

        要更清楚地了解⼆维数组的指针,⾸先要掌握⼆维数组数据结构的特性。⼆维数组可以看成是元素值为⼀维数组的数组。假设有⼀个 3 ⾏ 4 列的⼆维数组a,它定义为:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

        a 是数组名。a 数组包含3⾏,即 3 个元素:即 a[0]、a[1]、a[2]。⽽每个元素又是⼀个包含4 个元素的⼀维数组。同⼀维数组⼀样,a 的值为数组⾸元素地址值,⽽这⾥的⾸元素为 4 个元素组成的⼀维数组。

        因此,从⼆维数组角度看,a 代表的是⾸⾏的⾸地址。 a+1 代表的是第⼀⾏的⾸地址。a[0]+0 可以表示为 &a[0][0],即⾸⾏⾸元素地址;a[0]+1 可以表示为 &a[0][1] ,即⾸⾏第⼆个元素的地址。

        使⽤指针指向数组时,在⼀维数组中 a[0] 与 *a[o] 等价,a[1] 与 *a(+1) 等价。因此,在⼆维数组中 a[0]+1 和 *(a+0)+1 的值都是&a[0][1],如下图中地址1002,a[1]+2 和 *(a+1)+2 的值都是 &a[1][2],如下图中的地址1012。

         下⾯再来看⼀个实例程序。

#include <stdio.h>
int main()
{int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};printf("%d,%d\n", a, *a);printf("%d,%d\n", a[0], *(a + 0));printf("%d,%d\n", &a[0], &a[0][0]);printf("%d,%d\n", a[1], a + 1);printf("%d,%d\n", &a[1][0], *(a + 1) + 0);printf("%d,%d\n", a[1][1], *(*(a + 1) + 1));return 0;
}

三、总结

        上⾯实例程序中给出了对⼆维数组的基本操作,那么我们可以根据这些基本操作的组合作出更⾼级的操作。


http://www.ppmy.cn/embedded/26762.html

相关文章

java序列化和反序列化基础学习

一、前言 前文分析了java的反序列化的DNSURL利用链&#xff0c;但是对于java反序列化的一些过程不是很了解&#xff0c;这篇主要记录下学习java反序列基础知识 二、原理 概念 1、什么是序列化和反序列化 &#xff08;1&#xff09;Java序列化是指把Java对象转换为字节序列…

香港Web3,步履蹒跚

4月30日&#xff0c;6支香港虚拟资产现货ETF在香港交易所敲钟上市&#xff0c;正式迎来市场首秀。 而在前一周&#xff0c;香港证监会&#xff08;SFC&#xff09;官网就已列出华夏基金(香港)、博时国际和嘉实国际三家基金公司的比特币和以太坊现货ETF&#xff0c;并陆续披露了…

制作Android分区镜像

1 python生成一个sector数据 def get_oem_bootmode(): # Header size SECTOR_SIZE_IN_BYTES 512 header [0 for i in \ range(SECTOR_SIZE_IN_BYTES)] # magic # The ord() built-in function in # Python converts a character # into …

思考!思考!jmeter线程数≠用户并发数

最近又在搞性能测试了&#xff0c;相较于之前的写脚本出数据就完事&#xff0c;这次深入的思考了一下测试出来的指标&#xff0c;到底有什么意义&#xff1f;&#xff1f;&#xff1f; 绞尽脑汁思考了好几天&#xff0c;终于有了点思路&#xff0c;写出来与大家分享&#xff0…

【yolov8】yolov8剪枝训练流程

yolov8剪枝训练流程 流程&#xff1a; 约束剪枝微调 一、正常训练 yolo train model./weights/yolov8s.pt datayolo_bvn.yaml epochs100 ampFalse projectprun nametrain二、约束训练 2.1 修改YOLOv8代码&#xff1a; ultralytics/yolo/engine/trainer.py 添加内容&#…

【prometheus】监控MySQL并实现可视化

目录 一、概述 1.1下载解压mysqld_exporter 1.2创建MySQL授权用户 1.3配置my.cnf 1.4启动mysqld_exporter 1.5prometheus配置修改 二、Grafana展示 【Prometheus】概念和工作原理介绍_prometheus工作原理 【Prometheus】k8s集群部署node-exporter 【prometheus】k8s集…

RTSP,RTP,RTCP

机器学习 Machine Learning&#xff08;ML&#xff09; 深度学习&#xff08;DL&#xff0c;Deep Learning&#xff09; CV计算机视觉&#xff08;computer vision&#xff09; FFMPEG&#xff0c;MPEG2-TS,H.264,H.265,AAC rstp,rtp,rtmp,webrtc onvif,gb28181 最详细的音…

RuoYi-Vue-Plus (SPEL 表达式)

RuoYi-Vue-Plus 中SPEL使用 DataScopeType 枚举类中&#xff1a; /*** 部门数据权限*/DEPT("3", " #{#deptName} #{#user.deptId} ", " 1 0 "), PlusDataPermissionHandler 拦截器中定义了解析器&#xff1a; buildDataFilter 方法中根据注解的…