数组
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
一、声明数组
type arrayName [ arraySize ];
这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C++ 数据类型。
例如:一个类型为 double 的包含 10 个元素的数组 xx
double xx[10];
xx 是一个可用的数组,可以容纳 10 个类型为 double 的数字
二、初始化数组
( 1) int xx[5] = {11,22,33,44,55}; 声明一个类型为 int 的包含 5 个元素的数组
(2) xx[4] = 55; ————> 把第 5 个元素的值 赋为 55
三、访问数组
数组元素类型 名称 = 数组名[ 元素的索引 ];
如:
int a[3] = {1,2,3}; int b = a[0]; int c = a[2]; //则,b = 1,c = 3;
#include <iostream> using namespace std; #include <iomanip> using std::setw; int main () { int n[ 10 ]; // n 是一个包含 10 个整数的数组 // 初始化数组元素 for ( int i = 0; i < 10; i++ ) { n[ i ] = i + 100; // 设置元素 i 为 i + 100 } cout << "Element" << setw( 13 ) << "Value" << endl; // 输出数组中每个元素的值 for ( int j = 0; j < 10; j++ ) { cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl; } return 0; }
使用了 setw() 函数来格式化输出
结果:
四、数组详解
多维数组 | C++ 支持多维数组。多维数组最简单的形式是二维数组。 |
指向数组的指针 | 您可以通过指定不带索引的数组名称来生成一个指向数组中第一个元素的指针。 |
传递数组给函数 | 您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。 |
从函数返回数组 | C++ 允许从函数返回数组。 |
(1)多维数组
type name[size1][size2]...[sizeN];
例如,创建一个二维 3行 4列 整型数组:
int threedim[3][4];
初始化:
int a[3][4] = { {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ {8, 9, 10, 11} /* 初始化索引号为 2 的行 */ }; or int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11}; //两个是等同的
访问:
a[x][y];
(2)指向数组的指针
数组名是一个指向数组中第一个元素的常量指针
例如:double balance[50];
balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。
因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址:
double *p; double balance[10]; p = balance;
访问数组元素:
- *(balance + 4) ————> 访问balance[4]
- 一旦您把第一个元素的地址存储在 p 中,您就可以使用 *p、*(p+1)、*(p+2) 等来访问
#include <iostream> using namespace std; int main () { // 带有 5 个元素的双精度浮点型数组 double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; p = balance; // 输出数组中每个元素的值 cout << "使用指针的数组值 " << endl; for ( int i = 0; i < 5; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } cout << "使用 balance 作为地址的数组值 " << endl; for ( int i = 0; i < 5; i++ ) { cout << "*(balance + " << i << ") : "; cout << *(balance + i) << endl; } return 0; }
结果:
在上面的实例中,p 是一个指向 double 型的指针,这意味着它可以存储一个 double 类型的变量。一旦我们有了 p 中的地址,*p 将给出存储在 p 中相应地址的值
补充:
补充:
1. Array 直接初始化 char 数组是特殊的,这种初始化要记得 字符是以一个 null 结尾的。 ————> 要给null 留位置
char a1[] = {'C', '+', '+'}; // 初始化,没有 null char a2[] = {'C', '+', '+', '