C语言指向多维数组的指针

指向多维数组元素的指针变量 //输出二维数组任一行任一列元素的值 阅读详情

转自http://blog.youkuaiyun.com/helloeveryon/article/details/51851188?locationNum=13&fps=1

本小节以二维数组为例介绍多维数组的指针变量。
多维数组的地址
设有整型二维数组a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
它的定义为:
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}
设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
这里写图片描述

前面介绍过,C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0]、a[1]、a[2]。每一个一维数组又含有四个元素。
这里写图片描述
例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。

数组及数组元素的地址表示如下:从二维数组的角度来看,a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址,等于1000。a+1代表第一行的首地址,等于1008。如图:
这里写图片描述
a[0]是第一个一维数组的数组名和首地址,因此也为1000。(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址,也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],(a+0),*a,&a[0][0]是相等的。

同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。&a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。

由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。

此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。

另外,a[0]也可以看成是a[0]+0,是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。

由a[i]=(a+i)得a[i]+j=(a+i)+j。由于(a+i)+j是二维数组a的i行j列元素的首地址,所以,该元素的值等于(*(a+i)+j)。

【例10-22】



    main(){
    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    printf("%d,",a);
    printf("%d,",*a);
    printf("%d,",a[0]);
    printf("%d,",&a[0]);
    printf("%d\n",&a[0][0]);
    printf("%d,",a+1);
    printf("%d,",*(a+1));
    printf("%d,",a[1]);
    printf("%d,",&a[1]);
    printf("%d\n",&a[1][0]);
    printf("%d,",a+2);
    printf("%d,",*(a+2));
    printf("%d,",a[2]);
    printf("%d,",&a[2]);
    printf("%d\n",&a[2][0]);
    printf("%d,",a[1]+1);
    printf("%d\n",*(a+1)+1);
    printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
    }

指向多维数组的指针变量
把二维数组a分解为一维数组a[0]、a[1]、a[2]之后,设p为指向二维数组的指针变量。可定义为:
int (*p)[4]
它表示p是一个指针变量,它指向包含4个元素的一维数组。若指向第一个一维数组a[0],其值等于a,a[0],或&a[0][0]等。而p+i则指向一维数组a[i]。从前面的分析可得出(p+i)+j是二维数组i行j 列的元素的地址,而(*(p+i)+j)则是i行j列元素的值。

二维数组指针变量说明的一般形式为:
类型说明符 (*指针变量名)[长度]
其中“类型说明符”为所指数组的数据类型。“”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意“(指针变量名)”两边的括号不可少,如缺少括号则表示是指针数组(本章后面介绍),意义就完全不同了。

【例10-23】

    main(){
    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    int(*p)[4];
    int i,j;
    p=a;
    for(i=0;i<3;i++){
    for(j=0;j<4;j++) printf("%2d ",*(*(p+i)+j));
    printf("\n");
    }
    }
keil5编程前的工程文件配置,芯片型号支持包配置,用户文件配置,启动文件配置和库函数配置-江科大stm32学习 第一天 1.start文件夹中头文件需要配置路径path,另外user和library也需要,都是同样的操作。如图,在option界面c/c++中,在倒数第二空行的三个点处添加。2.需要设置一个宏,作用是使主函数头文件包含标准库函数,操作如图:复制头文件中8296行的字符串,在option界面的c/c++中第一行define粘贴这个字符串即可。一、首先,下载芯片支持包,选择你自己的器件型号,不懂的可以看我这篇选器件的方法(默认已经注册好用户)点击编译按钮,编译成功后即可在user文件夹里添加main.c正常使用。 阅读详情

相关推荐

5G NR 物理层 流程一:从帧结构到TB块,PDSCH/PUSCH 资源映射与TBS计算实战

本文详细解析了5G NR物理层流程,从帧结构到TB块的计算,重点介绍了PDSCH/PUSCH资源映射与TBS计算的实战方法。通过具体案例和公式推导,帮助工程师掌握5G NR资源分配、MCS选择及TBS量化过程,解决实际部署中的常见问题。

weixin_30897233的博客 94

C语言指针操作(五)通过指针引用多维数组

多维数组的地址,通过指针引用多维数组详解。指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素;但在概念和使用方法上,多维数组的指针比一维数组的指针要复杂一些。

伯努利 6267

GDSFactory环境配置实战:Python、KLayout与PDK协同指南

GDSFactory是面向光子集成电路(PIC)设计的Python参数化建模框架,其核心价值在于将版图生成从手动绘图升维为可编程、可复现、可集成CI/CD的工程实践。它依赖Python科学计算生态(如NumPy)、EDA可视化工具KLayout的深度Python绑定,以及工艺厂PDK的标准化接入,三者构成‘计算-几何-工艺’技术闭环。典型应用场景包括教学级SiEPIC PDK快速原型、工业级AIM Photonics流片准备,以及自动化DRC与光学仿真流水线构建。本文聚焦GDSFactory落地中最关键也最

weixin_30983353的博客 368

详解指向多维数组的指针

1,二维数与指针 //输出代码举例 void main() { int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; printf(“%u ,%u\n”,a,*a); printf(“%u ,%u\n”,a[0],*(a+0)); printf(“%u ,%u\n”,&a[0],&a[0][0]); ...

king52113141314的博客 6290

Creo二次开发环境配置与DLL项目实战指南(Creo8.0+VS2019)

本文详细介绍了Creo8.0与VS2019环境下的二次开发配置与DLL项目实战指南,涵盖环境准备、版本匹配、DLL项目创建、核心代码编写、部署调试及常见报错处理。重点解析了Creo二次开发中的关键配置和优化技巧,帮助开发者高效解决实际问题。

weixin_28432777的博客 516

《机器学习》周志华_自学记录

第一章绪论## 1.1引言机器学习所研究的主要内容,是关于在计算机上从数据中产生"模型"(model)的算法,即"学习算法"(learning algorithm).在面对新的情况时(例如看到一个没剖开的西瓜),模型会给我们提供相应的判断(例如好瓜).如果说计算机科学是研究关于"算法"的学问,那么类似的,可以说机器学习是研究关于"学习算法"的学问.## 1.2基本术语:用于预测离散值,例如将样本分为“好瓜”或“坏瓜”。:用于预测连续值,例如西瓜的成熟度(如0.95、0.37)。

2201_75296678的博客 2530

多维数组与指针

a[0]、a[1]、a[2]既然是一维数组名,而C语言又规定了数组名代表数组首元素地址,因此a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0]。a[1]的值是&a[1][0],a[2]的值是 &a[2][0]。因为a 是一行的地址,整个一行,对一行取*,意味着从一行里面取出第一个元素的,第一个元素a[],那么也就等于在二维数组&a【】【】的地址,所以是int *int *p[10] 指针数组(里面装的都是指针,10个指针),sizeof(p)就为80,因为指针在里面的长度为8。

weixin_63722559的博客 1051

Qt 6.5实战:用QMediaPlayer搞定RTSP监控流播放(附LAV Filters解码器避坑指南)

本文详细介绍了如何在Qt 6.5中使用QMediaPlayer实现低延迟RTSP监控流播放,并提供了LAV Filters解码器的配置避坑指南。通过优化缓冲策略和硬件加速设置,显著提升视频流的播放性能和稳定性,适用于工业视觉检测和安防监控等实时场景。

weixin_33712987的博客 397

C语言定义指向多维数组的指针

最近看了一下C语言的指针,突然发现指向多维数组的指针有点奇怪,这里总结一下:首先我们都知道,对于一维数组比如说 int a[10],a就是该数组的首地址,如果我们想定义一个指向该数组的指针我们可以用如下定义:int * p;然后p=a;这样的话指针p就指向了数组a的首地址。但是如果我们定义一个多维数组,如: int zippo[4][2];数组名zippo是数组元素的首地址,但是我们如果还用上面的...

dream_follower的博客 5918

全覆盖路径规划开源项目Clean-robot-turtlebot3关键函数解析(上)

本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。

慕羽★的博客 2778

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度!

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! (以YOLO26最新目标检测模型为基础,利用LSKNet替代Backbone)

2502_91881744的博客 211

C语言基础:C 中数组详解(多维数组、传递数组给函数 、从函数返回数组 、指向数组的指针 )

C 中数组详解(多维数组、传递数组给函数 、从函数返回数组 、指向数组的指针 )

天行健 君子以自强不息,地势坤 君子以厚德载物。 2165

【OpenClaw从入门到精通】第26篇:从0到1构建OpenClaw二次发行版——企业专属AI平台实战指南(2026实测)

本文基于OpenClaw 2026.3.7开源内核,聚焦企业级AI平台的二次发行构建,从技术原理、实操流程到商业落地提供完整方法论。核心围绕“内核层-能力层-产品层”三层架构,详解源码编译、私有化部署、企业级特性开发(数据合规、国产化适配、业务系统集成)、产品化包装等关键步骤,并通过审计行业“智审助手”虚拟实战案例具象化落地路径。文章兼顾新手入门与进阶提升,提供可直接复用的代码、配置文件及执行结果,解决企业对AI Agent“开箱即用”“数据不出域”“业务适配”的核心诉求,助力开发者快速打造企业专属AI平台

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 711

从零开始学C语言系列之第八章《指向多维数组的指针》

系统不同,输出的地址可能不同,但是地址之间的关系相同。如前所述,虽然pz是一个指针,不是数组名,但是也可以使用 pz[2][1]这样的写法。​   例如,不用类型转换就可以把int类型的值赋给double类型的变量,

铁匠匠匠的博客 1787

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c语言指针数组ppt,C语言-指向多维数组的指针.ppt

C语言-指向多维数组的指针.pptChapter 8 善于利用指针Contents8.6 返回指针值的函数8.7 指针数组和多重指针8.8 动态分配内存和指向它的变量,8.5 指向函数的指针,通过指针引用二维数组,a34 1, 2, 3, 4 , 5, 6, 7, 8 , 9,10, 11,12 ;,由三个1维数组组成,分别是a0 a1 a2 P246图8.19,图8.20和表8.2 比较好的复...

weixin_31642531的博客 164

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

c语言中指向多维数组的指针,C语言-指向多维数组的指针.ppt

C语言-指向多维数组的指针Chapter 8善于利用指针 Contents BHJSJ 8.8 动态分配内存 需要时申请,不需要时释放。 目的:提高内存的利用率。 malloc(100) //开辟10字节的空间,返回值为 空间首地址。 int *p; p=(int *)malloc(10*sizeof(int)); for(i=0...

weixin_36308848的博客 248

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

1124C语言----指向多维数组的指针和指针变量

总结一下今天所学的C语言: 第一;如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下4种: 1)   形参和实参都是数组名。 main() {int a[10];   ……  f(a,10)   …… f(intx[],int n) {  …… } } a和x指的是同一组数组。 2)   实用数组,形参用指针变量。

剑! 951

《C语言程序设计》第五章 指针与数组——5.6 指针数组以及指向指针的指针 5.7 多维数组 5.8 指针数组的初始化

【阅读笔记】《C语言程序设计》第五章 指针与数组——5.6 指针数组以及指向指针的指针 5.7 多维数组 5.8 指针数组的初始化

2401_87548284的博客 225

C语言第5题:数组指针指向多维数组

这两句是等效的 int main(void) { int buf[2][3] = { {1,2,3},{4,5,6} }; //int*p[3];指针数组 int(*p)[3];//定义了一个指针,指向int [3]这种数据类型,指向二位数组的指针 p = buf;//p指向了二维数组中的第一行 p++;//指向了第二行 printf("%d\n",sizeof(p)); printf("%d,%d\n",p,p+1); //位移了1 * sizeof(int [3]) system.

weixin_42989738的博客 470

C语言中如何用指针变量指向多维数组

果然谭浩强那本C语言的书某些知识点是错误的,今天在用代码实现的时候发现了错误。比如如何用指针变量引用二维数组,书中写的是定义指针变量和定义一维的时候一样,只是引用的时候不同而已,但实际去写代码的时候是错误的。举例引用二维整形数组。 int a[col]; //定义一个row行col列的二维数组 int (*p)[col]; //定义引用二维数组的指针变量,p为指针变量名,col为二维数组的列大

Bennett2251的博客 1017

Linux下讯飞SDK语音识别实战:从环境配置到批量转写

语音识别技术将音频信号转换为文本,是智能语音应用的基础环节。在Linux服务器环境中,开发者常需借助云服务SDK实现高效转写,其核心原理涉及音频采样、编码格式预处理、会话管理及流式数据上传。相比自建模型,在线语音识别API具有部署成本低、中文识别准确率高、扩展性好等优势,尤其适合会议录音、客服质检、媒体内容归档等离线批量场景。本文围绕科大讯飞Linux版语音识别SDK,讲解在Ubuntu服务器上如何完成环境配置、音频格式转换(PCM/ffmpeg)、C++接口调用及常见问题排查,提供一条可直接落地的工程实践

weixin_34221775的博客 438

不允许指针指向不完整的类类型_C语言的指针与多维数组

指针和多维数组有什么关系?为什么要了解它们的关系?处理多维数组的函数要用到指针,所以在使用这种函数之前,先要更深入地学习指针。至于第1个问题,我们通过几个示例来回答。为简化讨论,我们使用较小的数组。假设有下面的声明:int zippo[4][2]; /* an array of arrays of ints */然后数组名zippo是该数组首元素的地址。在本例中,zippo的首元素是一个内含两个...

weixin_39545895的博客 398

C 语言指针 “多维迷宫”:二维数组、指针数组与指向指针的指针大揭秘(三)

通过以上从存储本质、元素访问和函数参数等多个角度对二维数组和指针关系的剖析,可以更深入地理解C语言中二维数组的工作原理,并且能够更加灵活地运用指针来操作二维数组。

lxy370198409的博客 1306

C语言:指向数组的指针和指向数组首元素的指针

本文探讨了C语言中指向数组的指针与指向数组首元素的指针的区别。虽然它们在数值上可能相同,但类型不同导致指针运算时的行为差异:指向元素的指针加减以元素大小为步长,而指向数组的指针则以整个数组大小为步长。文章通过具体示例展示了三种指针定义方式(int*、int(*)[n]、int[])的地址运算差异,并说明指向数组的指针访问元素时需要先解引用。特别强调在多维数组场景下,正确理解这些指针类型差异对编程至关重要,错误使用会导致地址计算错误。

保持终身学习的能力,温故而知新 3097
上一篇: MySQL在大型网站的应用架构演变
下一篇: C++之拷贝构造函数
lm_123_456
博客等级 码龄11年 35粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值