一、关于二维数组和二维数组区别

(1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的。所以从内存的角度来分析,一维数组和二维数组其实没有本质区别。

(2) 二维数组可以使用一维数组来代替。但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程。

(3)两者在内存使用效率上是一模一样的。

二、二维数组的第一维和第二维概念

(1)例如 int a[2][5]中,前面的2表示第一维;后面的5表示第二维

(2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,里面存放了2个元素,这两个元素就分别是第二维的数组。第二维数组本身也是一个数组,里面存放的元素是普通的int型变量。

三、二维数组的下标访问

例1:

      int a[][] = {{,,,,},{,,,,}};
int (*p)[]; // 定义一个数组指针
p = a; printf(" a[1][2] = %d.\n", a[][]); // a[1][2] = 8
printf("(*(p+1)+1) = %d.\n", *(*(p+)+)); // a[1][2]

运行结果:

四、关于二维数据必须要明白的几个符号

例2:理解 a 、&a、 a[0]、 &a[0]、 a[0][0]、 &a[0][0]

 /*
二维数组的几个符号的测试
1、a等同于&a[0]
2、a[0]等同于&a[0][0]
3、在数值上 a、&a、a[0]、&a[0]、&a[0][0] 是相等的,但是在类型上面是有区别的。
*/
int a[][] = {{,,,,},{,,,,}}; printf("a = %p.\n", a); // a 类型是 int (*)[5]
printf("&a = %p.\n", &a); // &a 类型是 int (*)[2][5]
printf("a[0] = %p.\n", a[]); // a[0] 类型是 int *
printf("&a[0] = %p.\n", &a[]); // &a[0] 类型是 int (*)[5]
printf("a[0][0] = %d.\n", a[][]); // a[0][0] 类型是 int
printf("&a[0][0] = %p.\n", &a[][]); // &a[0][0]类型是 int *

运行结果:

例3:第一维和第二维的数组指针的使用

     // 二维数组与指针的结合使用
int a[][] = {{,,,,},{,,,,}}; int (*p1)[]; // 数组指针
int *p2; // 一般指针
p1 = a; // 等同 p1 = &a[0]; // 指向二维数组的数组名
p2 = a[]; // 等同 p2 = &a[0][0]; // 指向二维数组的第一维数组 printf("a[0][2] = %d.\n", *(*(p1+)+)); // a[0][2] = 3
printf("a[1][2] = %d.\n", *(*(p1+)+)); // a[1][2] = 8 printf("a[0][2] = %d.\n", *(p2+)); // a[0][2] = 3
printf("a[0][4] = %d.\n", *(p2+)); // a[0][4] = 5

运行结果:

五、总结

(1)需要理解二维数组的实质和几个符号的含义。

(2)二维数组和数组指针两者是有紧密的关系的。学会使用数组指针来操作二维数组,重在实践操作使用就会加深理解。

注:学习笔记部分是在朱有鹏老师物联网视频教程中摘取,特此声明。http://www.zhulaoshi.org/

C语言笔记(二维数组与数值指针)的更多相关文章

  1. C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)

    前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...

  2. 【学习笔记】【C语言】二维数组

    1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...

  3. C语言之二维数组

    二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例:  int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...

  4. C语言 字符二维数组(多个字符串)探讨 求解

    什么是二维字符数组? 二维字符数组中为什么定义字符串是一行一个? “hello world”在C语言中代表什么? 为什么只能在定义时才能写成char   a[10]="jvssj" ...

  5. C语言中将二维数组作为函数参数来传递

    c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h> void func(int n, char ...

  6. C语言回顾-二维数组

    1.二维数组:是一个特殊的一维数组 完全初始化: 1)int a[2][3]={{1,2,3},{2,3,4}}; 2)连续赋值int a[2][3]={1,2,3,2,3,4}; 3)可以省略第一维 ...

  7. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  8. C语言基础--二维数组

    二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...

  9. 【C语言】二维数组做形参

    二维数组有两种形式: ①在栈上:         int a[4][4] = {...}; ②在堆堆上:          int ** a = new int *[4];           for ...

随机推荐

  1. Redis集群服务器-高可用调研随笔[转]

    今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了.只能在下班的路上考虑下Redis集群服务器的高可用方案.随笔而已,尚未成型,仅作记录. 当然,我说的可能比较片面,欢迎拍砖.斧正. ...

  2. ACM 关于数据输入加速

    转载请注明出处:http://blog.csdn.net/a1dark 分析:我们都知道运行时间对我们来说很重要.有时候不惜用大量的内存去换取一点时间.有些人可能都比较关注这个问题.首先时间上:cin ...

  3. Android M 新的运行时权限开发者需要知道的一切

    android M 的名字官方刚发布不久,最终正式版即将来临!android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响.惊讶的是android社区鲜有谈论这事儿, ...

  4. MyEclipse10.0安装jad反编译插件

    1.下载反编译工具jad(下面提供下载) 将下载下来的jadstar158.zip解压缩,将jad.exe文件放入jdk安装目录下 如:C:\Program Files\Java\jdk1.6.0_2 ...

  5. Hack工具

    黑客工具一般是由黑客或者恶意程序安装到您计算机中,用来盗窃信息.引起系统故障和完全控制电脑的恶意软件程序.同时也指黑客进行黑客任务时使用的工具.著名的有nmap,流光等等. 目录 1 种类 2 恶意程 ...

  6. Qt OpenGL三维绘图

     简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...

  7. WCF - 消息

    SOAP SOAP是Simple Object Access Protocol(简单对象访问协议)的简称 而如今SOAP已经成为了符合W3C制定的SOAP规范的消息 允许您使用 XML 在通过低层 I ...

  8. 【转】正确使用Block避免Cycle Retain和Crash

    原文地址:http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/ 使用指南:http://blog.csdn.net/nic ...

  9. android注解使用详解(图文)

    在使用Java的SSH框架的时候,一直在感叹注解真是方便啊,关于注解的原理,大家可以参考我的另一片文章Java注解详解.最近有时间研究了android注解的使用,今天与大家分享一下. android中 ...

  10. C# 文件粉碎

    >文件粉碎的流程 填充文件 更改最后使用/创建时间 更改名称 将大小改为 0 kb 删除 using System; using System.Collections.Generic; usin ...