一、列指针(竖为列)

1、列指针相关定义

列指针:被称为是指针变量指向二维数组的某个元素

一般使用时会有如下定义:

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

而上述代码定义的指针p,一般按照下表方式指向二维数组a中的元素:

                   语法      样例                     说明
指向任意元素 指针变量=&数组名[下标1][下标2] p=&a[1][2] p指向的元素为7
指向首元素

指针变量=&数组名[0][0]

指针变量=*二位数组名

p=&a[0][0]

或p=*a

p指向首元素,即数值1所在的位置

当指针p指向二维数组a的首元素后,p+1指向第2个元素,p+2指向第三个元素,如下表:

p(对应的内容:1) p+1(对应的内容:2) p+2(对应的内容:3) p+3(对应的内容:4)
p+4(对应的内容:5) p+5(对应的内容:6) p+6(对应的内容:7) p+7(对应的内容:8)
p+8(对应的内容:9) p+9(对应的内容:10) p+10(对应的内容:11) p+11(对应的内容:12)

因为这种定义下的指针p,每执行加1操作后,将会指向下一列的一个元素,因此称为“列指针”

2、列指针公式

当指针p指向了M行N列的二维数组a,则其中任意一个元素a[i][j]的相关信息可以表示为:

元素名称 元素地址 元素内容
a[i][j] p+i*N+j

*(p+i*N+j)

二、行指针(横成行)

1、行指针相关定义

行指针:指针变量指向二维数组的某一行

一般使用时,有如下定义:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];//定义行指针,其“4”要和定义的二维数组的列数目“4”相同
p=a;          //行指针p指向二维数组a的首行

对于行指针,可以按如下解释理解:

可以将二维数组的首行视为一个特殊的元素,而这个特殊的元素其实就是一个一维数组。那么上述代码定义的二维数组即为一个由三个特殊元素组成的“一维数组”。此时a即是这个一维数组的名称,按照一维数组的定义及知识可得,a是这个一维数组的数组名,也是首地址,也就是第一个元素的地址,也就是第一行的首地址,指的是首行一整行。所以,a+0.a+1,a+2都是行指针。(橘黄色和橘黄色对应,绿色和绿色对应)

所以就有如下表格(描述指向各行的行指针):

表示方法 说明 指针类型
a或者a+0 指向第0行 行指针
a+1 指向第1行 行指针
a+2 指向第2行 行指针

有了行指针之后,我们以第0行为例,展开说明行里的各个元素的表示方法等:

表示方法 说明 指针类型
a[0] 是一维数组名称,首地址,第0个元素的地址(a[0]+0) 列指针
a[0]+1 第0行,第1个元素 列指针
a[0]+2 第0行,第2个元素 列指针
a[0]+3 第0行,第3个元素 列指针

注:为了方便起见,我这里的元素排序从0开始,即第0个,第1个,与数组的下标对应。

2、行指针公式

当指针p指向了M行N列的二维数组a,则其中任意一个元素a[i][j]的相关信息可以表示为:

元素名称 元素地址 元素内容
a[i][j] *(a+i)+j或a[i]+j *(*(a+i)+j)或*(a[i]+j)

注:元素a[i][j]的地址可表示为a[i]+j,由于a[i]等价于*(a+i)(根据一维数组的定义可知),因此其地址可表示为*(a+i)+j。

至此,行指针与列指针的的区别介绍完毕!

三、列指针和行指针的联系

先明白两个前文说的两个事情:

行指针:指的是一整行,不指向具体元素。

列指针:指的是二维数组中某一行的某个具体元素。

可以将列指针认为是行指针的具体元素,行指针是列指针的地址。

两者间的具体转化:

*行指针--->列指针

&列指针--->行指针

*是指针运算,&取址运算。*后面必须是指针变量,&后面则什么变量都可以。

行指针代码:

#include<stdio.h>//行指针输入8个元素,再输出
int main()
{int a[2][4];//定义二维数组int i=0,j=0;int (*p)[4];//定义行指针p=a;//将行指针指向二维数组第0个元素int n=0;for(i=0;i<2;i++){for(j=0;j<4;j++){scanf("%d",*(p+i)+j);//输入数字}}//p=a;for(i=0;i<2;i++){for(j=0;j<4;j++){printf("%2d",*(*(p+i)+j));//输出n++;if(n%4==0)printf("\n");}}return 0;
}

参考:RockeyQin  行指针和列指针详解

(CED)列指针与行指针的联系与区别相关推荐

  1. 行指针与列指针的联系和区别

    两个重要概念:行指针和列指针. 行指针:指的是一整行,不指向具体元素. 列指针:指的是一行中某个具体元素. 可以将列指针理解为行指针的具体元素,行指针理解为列指针的地址. 那么两个概念之间的具体转换是 ...

  2. 「C语言」指针数组 数组指针 指针函数 函数指针

    相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下.其实要具体了解这四个概念,只需要了解符号优先级,并关注最后两字,你就成功了一半. 符号优先级 ...

  3. c语言列指针的形式,C语言:行指针和列指针

    本文主要介绍C语言二维数组中的行指针及列指针,目的是为了搞清二维数组或更高维数组在作为函数参数进行传递时,考虑到代码的可复用性及软件最小权限原则,如何声明该形式参数.学习笔记,仅供参考,如有错误,敬请 ...

  4. 【C++】二维数组的行指针和列指针

    在C++中,数组与指针有密切的关系.任何通过数组和下标实现的表达式可等价地通过指针和偏移量实现.下面首先介绍一维数组与指针的关系,之后介绍二维数组的行指针和列指针. 1.一维数组和指针 定义一个长度为 ...

  5. 行指针和列指针的理解

    指针与二维数组 int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; 我们以为,二维数组的存储形式是: 但是,二维数组实际上是以一维数组为单位连续存储的. 这样, ...

  6. c语言 指针6行7列矩阵的转置,指针第一次练习

    1.实现功能:输入3个整数,按数值由小到大的顺序输出. 方法一:只编写主函数,利用指针指向三个变量,不修改原变量的值,通过修改指针的指向实现输出顺序的改变. #includeint main() { ...

  7. 求行指针所指的字符串数组中长度最长的字符串所在的行下标

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p137 习题5 3.行指针ss所指字符串数组中共有M个字符串,且字符串长度<N.求ss所指字符串 ...

  8. 【 C 】指向数组的指针(数组指针)(行指针)

    本博文内容参考:<C 和 指针> 本博文解决两个问题,一是如何访问二维数组的行,以及元素:二是如何定义指向数组的指针以及如何赋值等. 很简单,快速记录! 先给出一个案例,判断下面这两个声明 ...

  9. C语言实用算法系列之行指针

    代码 #include <stdio.h>void Test(double (*a)[3]) {printf("sizeof(a)=%d\n", sizeof(a)); ...

最新文章

  1. 解决Java Web对Linux服务器不能上传文件的难题
  2. 使用 MSIX 打包 DotNetCore 3.0 客户端程序
  3. 江诗丹顿geneve系列_南京江诗丹顿维修保养多少钱石英手表清洗
  4. 少年,这有套《街霸2》AI速成心法,想传授于你……
  5. mysql语句大全(2)
  6. mybatis list为入参_Mybatis进阶学习
  7. JPA唯一索引更新删除的问题
  8. 变量unset与null的区别
  9. web系统服务器登录不上去,宝塔面板严重错误登录不上怎么办
  10. 如何录制网络视频,屏幕录制软件哪个好
  11. 2022 年度杭州未来科技城数字经济人才编程大赛
  12. python机器学习实战|机器学习入门笔记1-机器学习流程+matplotlib简单应用
  13. MySQL版本号后面包含“-log”代表什么意思?
  14. 牛客练习赛50(牛客1080F):F.tokitsukaze and Another Protoss and Zerg(组合数学 + NTT + 启发式)
  15. debian linux手机安装,在 Android 系统上安装 Debian Linux 与 R
  16. 加薪不如发奖金? 穆穆-movno1
  17. lisp一键室内标注_[AutoCAD][AutoLisp]根据图框自动匹配标注比例、文字大小、线性比例等信息 | 古意人...
  18. 浅谈:UEO就是SEO的一种
  19. 下一次面试前你需要准备的五个基本步骤
  20. git+github

热门文章

  1. Linux 命令操作手册
  2. KAFKA 集成 SpringBoot2 消息发送和消费消息(基础篇)
  3. 工作流实战_14_flowable_已办任务列表查询
  4. Idea 依赖冲突一分钟解决2种方案
  5. Linux环境安装并配置Maven
  6. python使用PyMysql连接MySQL实现增删改查
  7. html中心对齐,html – 对齐内联块中心
  8. 2020洪灾地图_卫星地图看洪灾:为何湖北易发洪水?
  9. 命令行编译java项目_命令行编译运行java工程(转)
  10. qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8