数组

来源:互联网 发布:学陶笛软件 编辑:程序博客网 时间:2024/04/28 21:30

数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

数组类型说明 在C语言中使用数组必须先进行类型说明。 数组说明的一般形式为:

类型说明符 数组名 [常量表达式];

注意事项:
常量表达式: 因为数组必须在定义时确定起大小,一切不能确定长度的表达式都被视为错误
类型说明符:内置类型或者类类型,以及结构体都可以
数组名:数组标识符,也是数组中第1个元素的地址
在函数体外定义的内置数组,其元素均为0
在函数体内定义的内置数组,其元素无初始化
不管在哪里定义的,如果类型为类类型,调用类的默认构造函数初试化
特殊字符数组,"123" 为字符串字面值,存放这样的数组,起维数需多包含1个结束字符串符,NULL;
不也许数组直接复制和赋值
数组操作,下标从0开始到n-1结束

动态创建数组
动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap)
C语言用标准函数malloc和free来分配和释放储存空间.
而C++于之相对应的则使用new和delete来实现相同的功能.

1.动态数组的定义
   int *p=new int[10];  //分配含有10个int型元素的数组,并返回指向数组第一个元素的指针
自由储存区中创建的数组对象是没有名字的,只能通过地址间接访问堆中的对象
2.初始化动态分配的数组
    如果元素是类类型,则使用默认构造函数,如果是内置类型,则不无初始化
  int *p=new int [10](这里写初始值);
3.const对象的动态数组.
 const int *p=new int[10](10);  //可以这么定义,但是实际用处不大
4.允许动态分配空数组
   size_t n=get_size();
  int *p=new int[n];  //如果n是0,代码仍正确执行,C++虽明确定义不允许长度为0的数组变量,注意这里指的是数组变量,而调用new动态创建长度为0的数组是合法的.
5.动态空间的释放
  delete [] p;  //注意这里的[]号不能少
6.动态数组的使用,对于此情况,举例说明
   const char *noerr= "success";
   const char *err189= "error:函数必须声明 "
                                      "error:函数返回类型错误"
   const char *errorText;
   if(errorFound)
       errorText= err189;
   else
       errorText=noerr;
    int dimension=strlen(errorText)+1;  //记得结束符
   char *errMsg=new char[dimension];
   strncpy(errMsg,errorText,dimension);  

数组初始化容器
可以用数组的一个合法范围去初始化为容器
int a[5]={1,2,3,4,5};
vector<int> ivec(a,a+5);

多维数组:
严格的说C++没有多维数组,通常所指的多维数组其实就是数组的数组
int a[3][4];
int (*p)[4];  //2者等价
用Typedef简化指向多维数组的指针,举例说明
typedef int int_array[4];
int_array *p=a;
for(int_array *p=a:p!=a+3;++a)
  for(int *q=*p;q!=*p+4;++q)
    cout<<*q<<endl;

原创粉丝点击