C语言笔记(二维数组与数值指针)
2015-10-25 22:55
387 查看
一、关于二维数组和二维数组区别
(1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的。所以从内存的角度来分析,一维数组和二维数组其实没有本质区别。
(2) 二维数组可以使用一维数组来代替。但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程。
(3)两者在内存使用效率上是一模一样的。
二、二维数组的第一维和第二维概念
(1)例如 int a[2][5]中,前面的2表示第一维;后面的5表示第二维
(2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,里面存放了2个元素,这两个元素就分别是第二维的数组。第二维数组本身也是一个数组,里面存放的元素是普通的int型变量。
三、二维数组的下标访问
例1:
运行结果:
四、关于二维数据必须要明白的几个符号
例2:理解 a 、&a、 a[0]、 &a[0]、 a[0][0]、 &a[0][0]
运行结果:
例3:第一维和第二维的数组指针的使用
运行结果:
五、总结
(1)需要理解二维数组的实质和几个符号的含义。
(2)二维数组和数组指针两者是有紧密的关系的。学会使用数组指针来操作二维数组,重在实践操作使用就会加深理解。
注:学习笔记部分是在朱有鹏老师物联网视频教程中摘取,特此声明。http://www.zhulaoshi.org/
(1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的。所以从内存的角度来分析,一维数组和二维数组其实没有本质区别。
(2) 二维数组可以使用一维数组来代替。但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程。
(3)两者在内存使用效率上是一模一样的。
二、二维数组的第一维和第二维概念
(1)例如 int a[2][5]中,前面的2表示第一维;后面的5表示第二维
(2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,里面存放了2个元素,这两个元素就分别是第二维的数组。第二维数组本身也是一个数组,里面存放的元素是普通的int型变量。
三、二维数组的下标访问
例1:
int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; int (*p)[5]; // 定义一个数组指针 p = a; printf(" a[1][2] = %d.\n", a[1][2]); // a[1][2] = 8 printf("(*(p+1)+1) = %d.\n", *(*(p+1)+2)); // 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[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; printf("a = %p.\n", a); // a 类型是 int (*)[5] printf("&a = %p.\n", &a); // &a 类型是 int (*)[2][5] printf("a[0] = %p.\n", a[0]); // a[0] 类型是 int * printf("&a[0] = %p.\n", &a[0]); // &a[0] 类型是 int (*)[5] printf("a[0][0] = %d.\n", a[0][0]); // a[0][0] 类型是 int printf("&a[0][0] = %p.\n", &a[0][0]); // &a[0][0]类型是 int *
运行结果:
例3:第一维和第二维的数组指针的使用
// 二维数组与指针的结合使用 int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; int (*p1)[5]; // 数组指针 int *p2; // 一般指针 p1 = a; // 等同 p1 = &a[0]; // 指向二维数组的数组名 p2 = a[0]; // 等同 p2 = &a[0][0]; // 指向二维数组的第一维数组 printf("a[0][2] = %d.\n", *(*(p1+0)+2)); // a[0][2] = 3 printf("a[1][2] = %d.\n", *(*(p1+1)+2)); // a[1][2] = 8 printf("a[0][2] = %d.\n", *(p2+2)); // a[0][2] = 3 printf("a[0][4] = %d.\n", *(p2+4)); // a[0][4] = 5
运行结果:
五、总结
(1)需要理解二维数组的实质和几个符号的含义。
(2)二维数组和数组指针两者是有紧密的关系的。学会使用数组指针来操作二维数组,重在实践操作使用就会加深理解。
注:学习笔记部分是在朱有鹏老师物联网视频教程中摘取,特此声明。http://www.zhulaoshi.org/
相关文章推荐
- 在C语言的库函数中就有快速排序的库函数,即为qsort
- 日志库EasyLogging++学习系列(2)—— 日志级别
- c语言学习收获
- 通用线程池的设计和实现[C语言]
- C++中的const
- 水仙花数
- C语言三种循环用法和区别
- ——黑马程序员——C语言基础--printf函数和scanf函数
- 学习笔记-简单模板链表类的C++实现 15/10/25
- 输出* *** *****....图形
- C++ 上溢和下溢(overflow underflow)
- C++静态计算的例子
- 黑马程序员——OC语言日志——NSMutableString和NSMutableArray 的介绍及使用
- C语言打印指针(地址)的值
- C语言实现小游戏(一)
- C++利用栈进行十进制与二进制的转换
- C++ sort()函数一些简单的用法
- Debug和Release区别
- C++继承:公有,私有和保护
- 函数应用:打印图形