C++数组

发布于:2025-04-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

 数组

        数组,就是多个元素的有序“组合”。C和C++语言中的数组:相同大小的内存块组成,即相同类型的数据、 编号从0开始递增、而且这些编号是递增顺序。数组的“容量”是不能改变的。

数组的定义

数组和其他变量一样,需要先定义,再使用。

实例:int   a[8];        //定义了一个数组,数组名是“a”,包含8个元素,每个元素是int类型的变量,8个变量是连续存储在内存中的

a[0] = 20;        a[1] = 5;

数组的初始化

在定义数组的同时,设置数组内的元素值。        

int a[8] = {20, 5, 30, 13, 18};
printf("%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4]);
//或者cout << a[0] << “,” << a[1] << “,” << a[2] << “,” << a[3] << “,” << a[4];
int a[8] = {0};  //把数组的所有元素都初始化为0
int a[8] = {1};  //把a[0]初始化为1,其它值都初始化为0
int b[8] = {1, 5};  //把a[0]初始化为1,a[1]初始化为5,其它值都初始化为0
int a[] = {1,2,5}; //定义数组a, 这个数组包含3个元素!
// 根据“初始化列表”,自动计算数组的容量
/*
高逼格用法(在某些特殊场合使用)
优点:但数组的成员较多时,该方式可读性高
缺点:仅仅C编译器支持,C++编译器中不支持,即C++程序中不能使用。
//每周的锻炼时间:
int exercises[7] = {
[1] = 1, //a[1] = 1
[3] = 2, //a[3] = 2
//没有指定的成员,被初始化为0
};
*/

数组的内元素的访问

通过下标访问对应的元素。特别注意, 数组的第一个元素的下标是0, 而不是1。

另类用法:使用下标的方式访问string字符串

string name = "12345";
//name[i]是string字符串中的第i个字符(char类型)
for (int i=0; i< name.length(); i++) 
{
    cout << name[i];
}
name[0] = 'L';  //name变成:L2345
cout << endl << name;

数组的越界

数组的越界, 是指下标超出正常的范围!例如:int  a[10];  //a[-1] 和 a[10]都是越界!

越界后果:可能导致数据破坏,或其他不可预期的后果!

越界控制:需要程序员自己手动控制,编译器不做任何检查!因为,C/C++语言完全信任程序员!

C风格的字符串详解

C语言字符串的存储、初始化

字符串,是通过“字符数组”(元素类型为char的数组)来存储的!

//demo1
char  name[10];
name[0] = '1';
name[1] = '2';
name[2] = '3';
name[3] = '4';
name[4] = 0;  //字符串结束符0,就是 '\0'
printf("姓名:%s", name); 
name[2] = 0;
printf("姓名:%s", name);   

//demo2
char  name[10] = "1234"; //相当于char name[10] = {'1', '2', '3', '4', '\0'};
printf("姓名:%s", name);

//demo3
char  name[] = "1234";  //相当于:name[5] = "1234"
printf("%d", sizeof(name)); //5

二维数组

二维数组,就是指含有多个数组的数组!如果把一维数组理解为一行数据,那么,二维数组可形象地表示为行列结构。

二维数组的定义:和数组一样,需要先定义,再使用。

int a[5][25];  //定义了一个二维数组,数组名是“a”,包含 5 行 25 列,共 125 元素,每个元素是 int 类型的变量

二维数组的初始化:

int a[3][4]; //二维数组元素的值可能是随机的(全局变量会初始化为 0,局部变量值随机)

方式一 初始化时指定每行的值

int a[3][4]={    //等效于 int a[][4]
{1},//省略掉的会默认置零
{5,6,7},
{9,10,11,12}
};
//注:最外围括号内部的每个括号相当于初始化一行,括号中可以省略某些元素的初始化

方式二 初始化时从头开始,依次序进行

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int a[3][4]={1}; //只初始化第一个,其他得默认置零

二维数组的访问

如下图表示,左侧表示的是一个大小为 M+1 的一维数组,右侧表示的是一个大小为(M+1)*(N+1)的二维数组。

二维数组的存储方式

一维数组是按顺序存储的,二维数组呢? 同样也是!

二维数组作为函数的参数 

切记! 数组作为函数的参数传递,不是单纯的值传递,传递的是数组本身。

数组常见错误总结

数组定义时编译器不能确定数组的大小

int a[3][] ;        int a[][4] ;        int a[3][]={{1,2},{3,4},{5,6}}

一条原则:仅定义时(无初始化)不能省略,有初始化可以省略高维。

严禁数组越界。数组(无论几维)传参并不是整个数组的复制


网站公告

今日签到

点亮在社区的每一天
去签到