指针遍历二维数组的三种方式
2016-07-18 16:47
369 查看
#include<cstdio> void func1(int p[][3], int row, int col){ //第一种遍历方式 传递 二维数组名(行指针) //通过下标遍历 简单明了 for(int i=0; i<row; ++i){ for(int j=0; j<col; ++j) printf("%4d", p[i][j] ); printf("\n"); } printf("\n\n"); return; } void func2(int* p, int row, int col){ //第二种遍历方式 传递 第一行的首地址 //因为二维数组在内存中是连续存放的 //可以将它作为一维数组遍历, 依次解引用该行地址 完成遍历 for(int i=0; i<row; ++i){ for(int j=0; j<col; ++j) printf("%4d", *(p + i*3 + j) ); printf("\n"); } printf("\n\n"); return; } void func3(int (* p)[3], int row, int col){ //第三种遍历方式 传递 过来的 行指针 作为 数组指针 //同第一种方式 for(int i=0; i<row; ++i){ for(int j=0; j<col; ++j) printf("%4d", *(*(p+i)+j) ); printf("\n"); } printf("\n\n"); return; } int main(){ int a[4][3]={ {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} }; //作为数组名a 它实际上是一个 行指针/地址 //要想得到某行某列的值 //首先应该解引用 行指针/地址 得到 某行的起始位置(列指针/地址) //然后再解引用 列指针/地址 得到 数组元素的值 //下标运算 的本质 //实际上就是对数组特定位置上的 元素地址 进行解引用 printf("%d\n", *(*(a+0)+0) ); printf("%d\n", a[0][0] ); func1(a, 4, 3); func2(*a, 4, 3); //解引用a得到 第一行的首地址 func3(a, 4, 3); return 0; }
相关文章推荐
- stylelint — css书写规范
- 松耦合和紧耦合的架构设计、性能对比
- LA-5052 (暴力)
- Lua中的控制结构
- winform datagridview 添加行号。
- <context:component-scan>自动扫描
- 史上最全IO框架六(打印流)
- WCF心跳判断服务端及客户端是否掉线并实现重连接
- 计算机网络 (学习笔记)
- HTML+CSS实现图片下半部分遮罩文字效果(仿微信推送信息的图片文字效果)
- ansible获取主机信息并存入mysql数据库
- Java类加载机制浅析
- target情感分类(1,0,-1)——Target-dependent sentiment classification with long short term memory
- 学习笔记-斯坦福iOS7-第十六课:模态segue、文本框、警告视图
- 自定义转场动画 pop动画
- CentOS6.4安装Apache+MySQL+PHP
- 2016年找实习血泪史(中篇)
- sublime编辑器代码背景刺眼怎么修改?
- 下一代大数据系统和4S标准
- 自定义view--自定义分类Tab菜单条,自定义垂直progressbar(类似温度计)