C语言笔记(二维数组与数值指针)
一、关于二维数组和二维数组区别
(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语言笔记(二维数组与数值指针)的更多相关文章
- C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...
- 【学习笔记】【C语言】二维数组
1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...
- C语言之二维数组
二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例: int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...
- C语言 字符二维数组(多个字符串)探讨 求解
什么是二维字符数组? 二维字符数组中为什么定义字符串是一行一个? “hello world”在C语言中代表什么? 为什么只能在定义时才能写成char a[10]="jvssj" ...
- C语言中将二维数组作为函数参数来传递
c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h> void func(int n, char ...
- 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)可以省略第一维 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- C语言基础--二维数组
二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...
- 【C语言】二维数组做形参
二维数组有两种形式: ①在栈上: int a[4][4] = {...}; ②在堆堆上: int ** a = new int *[4]; for ...
随机推荐
- PAT 1018. Public Bike Management
There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...
- 【原创】javascript——prototype与__proto__
一定要注意这个概念:javascript世界里,万物皆对象, function是对象,prototyp也是对象. 新建构造函数,并实例 var Person = function(){} var ...
- js_面向对象编程
主要内容 值类型与引用类型的特征 深拷贝与浅拷贝 对象的动态特性 构造函数的执行过程 异常处理 dom操作(略) <!DOCTYPE html> <html> <head ...
- EasyUI-动态添加tab
layout效果 代码: <%@ page language="java" contentType="text/html; charset=utf-8" ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hadoop错误INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
报如下错误: 解决方法: 1.增加调试信息 在HADOOP_HOME/etc/hadoop/hadoop-env.sh文件中添加如下信息 2.再执行一次操作,看看报什么错误 上面信息显示,需要2.14 ...
- Load resources from classpath in Java--reference
In general classpath is the path where JVM can find .class files and resources of your application a ...
- win7家庭版升级旗舰版
点“开始”——在“所有程序”点"Windows Anytime Update"——点“输入升级密钥”,然后就出现一个密钥框,输入一个旗舰版的密钥,确定就行了,10分钟左右就升级好了 ...
- CXF整合Spring开发WebService
刚开始学webservice时就听说了cxf,一直没有尝试过,这两天试了一下,还不错,总结如下: 要使用cxf当然是要先去apache下载cxf,下载完成之后,先要配置环境变量,有以下三步: 1.打开 ...
- MegaCli监控RAID磁盘健康信息
首先有必要先介绍一下有关RAID卡的使用,有关Cache问题也有个人理解:生产系统上的物理机磁盘配置大多都是RAID5,之前会经常性的遇到磁盘IO在某个时间极度的跟不上节奏,稍微写入量,磁盘utils ...