您的位置:首页 > 其它

数组读书笔记

2016-04-16 10:51 393 查看
(注:下标的引用优先级高于间接访问)
1:数组名的值是一个指针常量,也就是数组第一个元素的地址,只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。
2:不能用赋值符把一个数组中的所有元素复制到另一个数组,只能通过循环来实现。
3:C的下标引用和间接访问时一样的。
例如: int *ap=arr;
*(ap+2)<====>ap[2];
4: ap[-1] ====>*(ap-1)
5: int arry[10] 2[arry]=*(2+arry).
6: 当你根据某个固定数目的增量在一个数组中移动时,使用指针比使用数组效率更高(指针中增量是1,并且机器具有地址自动增量模型)。
7:声明为寄存器变量的指针比位于静态内存和堆栈中指针的效率更高。

8:多维数组的理解
eg: int arr[6][10] ======>c是一个包含6个元素的数组,其中它的每个元素又是一个包含了10个元素的数组。
9:多维数组的存储顺序(线性存储)
按照右边下标率先变化的原则,称为行主序
10:指向数组的指针
eg: int vector[10], *vp=vector; √(vector和vp具有相同的类型,所以合法)
int matrix[3][10], *mp=matrix; ×(matrix并不是一个指向整形的指针,而是一个指向整形数组的指针)
正确的声明方式: int (*mp)[10]=matrix; (使mp指向matrix的第一行);
11:如果想逐个访问matrix中的元素而不是逐行访问,有以下两种声明方式;
eg: int *mp=&matrix[0][0];
int *mp=matrix[0];
12:作为函数参数的多维数组
由于多维数组名指的是另外一个数组,编译器需要知道它的维数,所以有以下两种方式进行声明:
int func( int (*mp)[10] );
int func( int mat[ ][10] );
13:指针数组

int *api[10];
14:总结
a:当我们声明了一个数组时,它同时也分配了一些内存空间,用于容纳数组元素,而声明一个指针时,它只分配了用于容纳指针本省的空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: