【C++基础】9. 数组

文章目录

  • 【 1. 数组的声明 】
  • 【 2. 数组的初始化 】
  • 【 3. 对数组元素的操作 】
    • 3.1 数组元素的索引
    • 3.2 数组元素的赋值
  • 【 4. 数组的应用 】
    • 4.1 多维数组
    • 4.2 数组指针、指针数组
    • 4.3 数组作为函数参数
    • 4.4 函数返回数组
  • 【 5. 数组的内存分配 】

  • C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是 一系列相同类型的变量

【 1. 数组的声明 】

  • 数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number99,而是 声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。
  • 在 C++ 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示的一维数组。 arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C++ 数据类型。
type arrayName [ arraySize ];
  • 例如,要声明一个类型为 double 的包含 10 个元素的数组 MyArray,声明语句如下:
double MyArray[10];

现在 MyArray是一个可用的数组,可以容纳 10 个类型为 double 的数字。

【 2. 数组的初始化 】

  • 在 C++ 中,我们可以在声明时初始化数组,大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。
double MyArray[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
  • 如果省略掉了数组的大小,数组的大小则为初始化时元素的个数。例如:
double MyArray[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

【 3. 对数组元素的操作 】

3.1 数组元素的索引

  • 所有的数组都是 以 0 作为第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1 。如下:
    【C++基础】9. 数组_第1张图片

3.2 数组元素的赋值

  • 我们可以为数组中某个元素赋值,例如:
MyArray[4] = 50.0; // 把数组MyArray中第五个元素的值赋为 50.0。

【 4. 数组的应用 】

4.1 多维数组

  • C++ 支持多维数组。多维数组最简单的形式是二维数组。多维数组的初始化、索引、赋值等操作与一维数组类似,不再赘述。

4.2 数组指针、指针数组

  • 详见文章:指针数组、数组指针

4.3 数组作为函数参数

  • C++ 中我们可以通过指定不带索引的数组名来传递一个指向数组的指针。C++ 传数组给一个函数,数组类型自动转换为指针类型,因而 传的实际是地址
  • 方法1:形参是一个指针。
void myFunction(int *param)
{
	...
}
  • 方法2:形参是一个已定义大小的数组
void myFunction(int param[10])
{
	...
}
  • 方法3:形参是一个未定义大小的数组
void myFunction(int param[])
{
	...
}
  • 实例
#include 
using namespace std;

//下面的getAverage()函数把数组作为参数,同时还传递了另一个参数,根据所传的参数,会返回数组中各元素的平均值:
double getAverage(int arr[], int size)
{
  int    i, sum = 0;       
  double avg;          

  for (i = 0; i < size; ++i)
  {
    sum += arr[i];
   }

  avg = double(sum) / size;

  return avg;
}

// 函数声明
double getAverage(int arr[], int size);

int main ()
{
   // 带有 5 个元素的整型数组
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

   // 传递一个指向数组的指针作为参数
   avg = getAverage( balance, 5 ) ;

   // 输出返回值
   cout << "平均值是:" << avg << endl; 

   return 0;
}

【C++基础】9. 数组_第2张图片

4.4 函数返回数组

  • C++ 不允许返回一个完整的数组作为函数的参数。但是,我们可以 通过指定不带索引的数组名来返回一个指向数组的指针。如果想要从函数返回一个一维数组,我们必须声明一个返回指针的函数,如下:
int * myFunction()
{
	...
}
  • C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量
  • 实例:函数getRandom() 生成 10 个随机数,并使用数组来返回它们,如下:
#include 
#include 
#include 

using namespace std;

// 要生成和返回随机数的函数
int * getRandom( )
{
  static int  r[10];

  // 设置种子
  srand( (unsigned)time( NULL ) );
  for (int i = 0; i < 10; ++i)
  {
    r[i] = rand();
    cout << r[i] << endl;
  }

  return r;
}

// 要调用上面定义函数的主函数
int main ()
{
   // 一个指向整数的指针
   int *p;

   p = getRandom();
   for ( int i = 0; i < 10; i++ )
   {
       cout << "*(p + " << i << ") : ";
       cout << *(p + i) << endl;
   }

   return 0;
}

【C++基础】9. 数组_第3张图片

【 5. 数组的内存分配 】

  • 系统根据定义顺序依次对变量分配的内存是从高地址到低地址(详见:C语言的内存分配),而 数组内部元素的内存分配都是从低地址到高地址 。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。两个依次定义的数据地址间的大小具体由编译器自行决定。

  • 实例:

#include"stdio.h"
int main()
{   
     int a[5]={15,18 ,2022, 49, 6}; 
     printf("数组首元素地址:%d\n",a);/*输出数组的首地址*/
     for(int i=0;i<5;i++)
        printf("数组元素a[%d]的地址:%d\n",i,&a[i]);/*输出数组元素的地址*/
	 return 0;
}

【C++基础】9. 数组_第4张图片

你可能感兴趣的:(C++,c++,开发语言)