(CED)列指针与行指针的联系与区别
一、列指针(竖为列)
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)列指针与行指针的联系与区别相关推荐
- 行指针与列指针的联系和区别
两个重要概念:行指针和列指针. 行指针:指的是一整行,不指向具体元素. 列指针:指的是一行中某个具体元素. 可以将列指针理解为行指针的具体元素,行指针理解为列指针的地址. 那么两个概念之间的具体转换是 ...
- 「C语言」指针数组 数组指针 指针函数 函数指针
相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下.其实要具体了解这四个概念,只需要了解符号优先级,并关注最后两字,你就成功了一半. 符号优先级 ...
- c语言列指针的形式,C语言:行指针和列指针
本文主要介绍C语言二维数组中的行指针及列指针,目的是为了搞清二维数组或更高维数组在作为函数参数进行传递时,考虑到代码的可复用性及软件最小权限原则,如何声明该形式参数.学习笔记,仅供参考,如有错误,敬请 ...
- 【C++】二维数组的行指针和列指针
在C++中,数组与指针有密切的关系.任何通过数组和下标实现的表达式可等价地通过指针和偏移量实现.下面首先介绍一维数组与指针的关系,之后介绍二维数组的行指针和列指针. 1.一维数组和指针 定义一个长度为 ...
- 行指针和列指针的理解
指针与二维数组 int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; 我们以为,二维数组的存储形式是: 但是,二维数组实际上是以一维数组为单位连续存储的. 这样, ...
- c语言 指针6行7列矩阵的转置,指针第一次练习
1.实现功能:输入3个整数,按数值由小到大的顺序输出. 方法一:只编写主函数,利用指针指向三个变量,不修改原变量的值,通过修改指针的指向实现输出顺序的改变. #includeint main() { ...
- 求行指针所指的字符串数组中长度最长的字符串所在的行下标
<程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p137 习题5 3.行指针ss所指字符串数组中共有M个字符串,且字符串长度<N.求ss所指字符串 ...
- 【 C 】指向数组的指针(数组指针)(行指针)
本博文内容参考:<C 和 指针> 本博文解决两个问题,一是如何访问二维数组的行,以及元素:二是如何定义指向数组的指针以及如何赋值等. 很简单,快速记录! 先给出一个案例,判断下面这两个声明 ...
- C语言实用算法系列之行指针
代码 #include <stdio.h>void Test(double (*a)[3]) {printf("sizeof(a)=%d\n", sizeof(a)); ...
最新文章
- 解决Java Web对Linux服务器不能上传文件的难题
- 使用 MSIX 打包 DotNetCore 3.0 客户端程序
- 江诗丹顿geneve系列_南京江诗丹顿维修保养多少钱石英手表清洗
- 少年,这有套《街霸2》AI速成心法,想传授于你……
- mysql语句大全(2)
- mybatis list为入参_Mybatis进阶学习
- JPA唯一索引更新删除的问题
- 变量unset与null的区别
- web系统服务器登录不上去,宝塔面板严重错误登录不上怎么办
- 如何录制网络视频,屏幕录制软件哪个好
- 2022 年度杭州未来科技城数字经济人才编程大赛
- python机器学习实战|机器学习入门笔记1-机器学习流程+matplotlib简单应用
- MySQL版本号后面包含“-log”代表什么意思?
- 牛客练习赛50(牛客1080F):F.tokitsukaze and Another Protoss and Zerg(组合数学 + NTT + 启发式)
- debian linux手机安装,在 Android 系统上安装 Debian Linux 与 R
- 加薪不如发奖金? 穆穆-movno1
- lisp一键室内标注_[AutoCAD][AutoLisp]根据图框自动匹配标注比例、文字大小、线性比例等信息 | 古意人...
- 浅谈:UEO就是SEO的一种
- 下一次面试前你需要准备的五个基本步骤
- git+github
热门文章
- Linux 命令操作手册
- KAFKA 集成 SpringBoot2 消息发送和消费消息(基础篇)
- 工作流实战_14_flowable_已办任务列表查询
- Idea 依赖冲突一分钟解决2种方案
- Linux环境安装并配置Maven
- python使用PyMysql连接MySQL实现增删改查
- html中心对齐,html – 对齐内联块中心
- 2020洪灾地图_卫星地图看洪灾:为何湖北易发洪水?
- 命令行编译java项目_命令行编译运行java工程(转)
- qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8