数组
2016-01-28 12:39
295 查看
数组名的值是一个指针常量。
下标引用
指针与下标。指针比下标更有效率,
指针和数组。指针和数组并不是相等的。
声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它是一个常量,指向这段空间的起始位置。
声明一个指针变量时,编译器只为指针本身保留内存空间。
字符数组的初始化
多维数组
避免 int (*p)[]=matrix;
p仍然是一个指向整型数组的指针,但数组的长度却不见了。当某个整数与这种类型的指针执行指针运算时,它的值将根据空数组的长度进行调整,这是错的。
下标引用
int array[10]; int *ap=array+2; ap[0]//除了优先级职位,下标引用和间接访问完全相同。ap[0]等价于*(ap+(0))。 ap[6]//等价于 *(ap+6) ap[-1]//等价于 *(ap-1),也就是array[1]
指针与下标。指针比下标更有效率,
//每一次循环都要做乘法运算:array+a*sizeof(int) int array[10],a; for(a=0;a<10;a+=1) array[a]=0; //为了对下标表达式求值,编译器在程序中插入指令,取得a的值,并把它与整型的长度相称。这个乘法需要花费一定的时间和空间。
//每次循环都要做的乘法运算:1*sizeof(int) int array[10],*ap; for(ap=array;ap<array+10;ap++) *ap=0; //这里的重大区别在于:循环每次执行时,执行乘法运算的都是两个相同的数(1和4)。结果。这个乘法只在编译时执行一次——程序现在包含了一条指令,把4与指针相加。程序在运行时并不执行乘法运算。
指针和数组。指针和数组并不是相等的。
int a[5]; int *b;
声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它是一个常量,指向这段空间的起始位置。
声明一个指针变量时,编译器只为指针本身保留内存空间。
字符数组的初始化
char message[]={'H','e','l','l','o',0}; char message[]="Hello";//数组初始化列表的另一种写法 //以上两种初始化方式是等价的 char message[]="Hello"; char *message="Hello"; //前者初始化一个字符数组的元素,而后者则是一个真正的字符串常量。这个指针变量被初始化为指向这个字符串常量的存储位置。
多维数组
int matrix[6][10]; int *mp; mp=&matrix[3][9]; *++mp; //matrix[4][0] int (*p)[10]=matrix;//使p指向拥有10个整型元素的数组的指针。将p与一个整数相加时,该整数相加时,该整数值首先根据10个整型值得长度进行调整,然后再执行加法。
避免 int (*p)[]=matrix;
p仍然是一个指向整型数组的指针,但数组的长度却不见了。当某个整数与这种类型的指针执行指针运算时,它的值将根据空数组的长度进行调整,这是错的。
相关文章推荐
- 关于指针的一些事情
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C# Pointer指针应用实例简述
- Ruby简明教程之数组和Hash介绍
- C语言查找数组里数字重复次数的方法
- C++智能指针实例详解