数组

来源:互联网 发布:js弹出确认对话框 编辑:程序博客网 时间:2024/05/29 16:32

数组 一维数组和多维数组

       一维数组和多维数组的概念,形式,用法想必我们了然于胸了。对于我来说,有些细节,平时我没有注意,但时常困扰于我。所以现在写出来,与大家分享。

数组名(多维数组以二维为例)

一维数组:数组名的值是一个指针常量,也就是数组第1个元素的地址。它的类型取决于数组元素的类型:如果它们是int类型,那么数组名的类型就是”指向int的常量指针”;如果它们是其他类型,那么数组名的类型就是”指向其他类型的常量指针”

二维数组: 由于二维数组的特殊性(第一维的元素实际是另一个数组),数组名是指向一个包含另一个数组的指针。如int a[3][10] 那么,a数组名是一个指向整型数组的指针,并不是一个指向整型的指针。

初始化

       多维数组尽量使用大括号表示数组的维数,易使代码易度。

与指针

以实例为例:

int a[10]; /* 一维数组 */int *ap = a; /* 正确, 一维数组名类型是一个指向整型的指针int *ap = &a; /* 正确, 指向了一维数组的第一个元素 */int b[3][10]; /* 二维数组 */int *bp1 = b; /* 错误,编译器会报出类型不兼容的错误信息, 因为b的类型是指向一个包含另一个数组的指针。*/int *bp1 = b[0]; /* 正确, b[0] 是另一个数组,即一维数组名 */int (*bp2)[10] = b; /* 正确, int (*bp2)[10] 在声明一个指向整型数组的指针,数组大小为10 */int *bp3 = &a[0][0]; /* 正确, 指向了二维数组的第一个整型元素 */
在内存存储方式

       正因为这样的存储方式,以下的操作是正确的。

int *ap = &a[0]; ap++;/* 取数组第一个元素的地址 */int *bp = &b[0][0]; bp++; /* 取数组第一个元素的地址 */

       已传相关测试代码: https://github.com/linuxkoala/test_src array目录。

0 0