linux-c之数组的一个总结
2016-12-12 20:30
218 查看
一、一维数组
整型数组的定义、初始化、遍历
1、定义与应用、遍历
数组的定义及遍历
2、数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理
【取舍问题】
对三种方法的选取:
1、for 最浪费时间,不建议(其实memset内部也是用循环实现的,只不过memset经过了严格优化,所以性能更高);
2、{0} 可能有移植性问题,虽然绝大多数编译器看到{0} 都是将数组全部初始化为0, 但是不保证所有编译器都是这样实现的;
3、综合1、2, 推荐使用memset方法。
数组名是指针常量,保存数组首元素的地址。
&a:对一维数组名取地址就是一维数组的地址。
*(&a): 对一维数组的地址取值等于一维数组首元素的地址。
二、二维数组
二维数组的定义、引用
如何用指针表达式来表达?
首先我们必须明白:
一维数组的里面的单位是元素;
二维数组的元素就是一维数组;
三维数组的元素就是二维数组;
a + i : 第i + 1个一维数组的地址
*(a + i) : 第i + 1个一维数组的首元素的地址;
*(a + i ) + j : 第i + 1个一维数组的第 j + 1 个元素的地址
* ( *( a + i ) + j ) :第i + 1个一维数组的第 j + 1 个元素的值
下面讲一下二维数组名的作用:
aa:首个一维数组的地址
*aa :首个一维数组首元素的地址
**aa: 首个一维数组的首元素的值
&aa:对二维数组名取值等于二维数组的地址
*(&aa):对二维数组的地址取值等于首个一维数组的地址
**(&aa):对二维数组的地址取值在取值等于首个一维数组的首元素地址
整型数组的定义、初始化、遍历
1、定义与应用、遍历
数组的定义及遍历
2、数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理
#define ARRAY_SIZE_MAX (1*1024*1024) void function1() { char array[ARRAY_SIZE_MAX] = {0}; //声明时使用{0}初始化为全0 } void function2() { char array[ARRAY_SIZE_MAX]; memset(array, 0, ARRAY_SIZE_MAX); //使用memset方法 } void function3() { int i = 0; char array[ARRAY_SIZE_MAX]; for (i = 0; i < ARRAY_SIZE_MAX; i++) //for循环赋值 { array[i] = 0; } }
【取舍问题】
对三种方法的选取:
1、for 最浪费时间,不建议(其实memset内部也是用循环实现的,只不过memset经过了严格优化,所以性能更高);
2、{0} 可能有移植性问题,虽然绝大多数编译器看到{0} 都是将数组全部初始化为0, 但是不保证所有编译器都是这样实现的;
3、综合1、2, 推荐使用memset方法。
数组名是指针常量,保存数组首元素的地址。
int a[3];
&a:对一维数组名取地址就是一维数组的地址。
*(&a): 对一维数组的地址取值等于一维数组首元素的地址。
二、二维数组
二维数组的定义、引用
int a[i][j];
如何用指针表达式来表达?
首先我们必须明白:
一维数组的里面的单位是元素;
二维数组的元素就是一维数组;
三维数组的元素就是二维数组;
a + i : 第i + 1个一维数组的地址
*(a + i) : 第i + 1个一维数组的首元素的地址;
*(a + i ) + j : 第i + 1个一维数组的第 j + 1 个元素的地址
* ( *( a + i ) + j ) :第i + 1个一维数组的第 j + 1 个元素的值
下面讲一下二维数组名的作用:
int aa[N][N];
aa:首个一维数组的地址
*aa :首个一维数组首元素的地址
**aa: 首个一维数组的首元素的值
&aa:对二维数组名取值等于二维数组的地址
*(&aa):对二维数组的地址取值等于首个一维数组的地址
**(&aa):对二维数组的地址取值在取值等于首个一维数组的首元素地址
相关文章推荐
- 对个帖子的总结:严重声明:C语言中不存在数组的类型!它仅仅是一个概念!
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 我的Linux历险记-在终于玩坏了一个系统之后的总结
- linux下开启虚拟主机,rewrite重写,针对本人一个项目的总结,
- Linux数组总结
- 计算一个数组所有元素之和(方法总结)
- [转]关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- Map接口及其重要实现类的方法总结:从HashMap中放入,查找,删除一个对象,并将全部value放入到一个数组中;获得HashMap的全部数据
- 这是一个Linux学习经验总结与学习的平台
- 程序员面试题目总结--数组(一)【递归求数组所有元素和、用一个for循环打印出一个二维数组、用递归判断数组是否是递增、有序数组中删除重复元素】
- 怎样向一个c++函数传数组、Linux下怎么显示unicode字符、Linux的地址空间
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命
- Linux下实现反转一个字符串或者数组中的数据
- 关于ffmpeg 的总结(一个linux下集屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 一个大型例子搞定 Javascript 的数组基础知识 ——总结《Javascript 权威指南》第六版数组基础知识
- 转一个后缀数组的简单总结:
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)(反射参数是一个数组的函数要小心)
- segmentation fault----在Linux下真是一个蛋疼的错误,总结一下出现这错误的经历
- Linux下用C语言将一个字符串格式(char*)的MAC地址转换为十六进制数组
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)