c++数组总结

数组的学习告一段落,但正所谓温故而知新,阶段性总结对巩固记忆及加深掌握很有帮助,所以还是要总结一波数组的要点。
数组:
一维数组:
1、一维数组声明:值的类型(不能使引用)、数组名和元素数(用值大于1的常量表达式定义)
int& a[10];//错误,没有引用数组
int a[6] = { 0,1,2,3,4,5 };
int (&p)[6] = a;//p是数组a的引用
2、数组元素初始化时,若没有显式提供元素初值,则元素会被像普通变量一样初始化:1)函数体外定义的内置类型数组,元素初始化为0;
2)函数体内定义的内置类型数组,元素无初始化(若只初始化部分元素,其后的元素此时也会被初始化为0);
3)如果不是内置类型,则不管其在哪定义,自动调用其默认构造函数为其初始化,若该类无默认构造函数则会报错。
3、数组大小未知时,需要动态声明一维数组:
int a = new int[2];
delete[]a;//数组使用完毕时要释放内存空间
4、C风格字符串:末尾必须有一个字符’\0’1)字符串常量,以双引号括起,编译器自动在末尾添加一个空字符2)末尾添加了’\0’的字符数组
5、字符数组:既可以用一组由括号括起来、逗号隔开的字符常量进行初始化,也可以用一个常量字符串(末尾有空字符)进行初始化注意:在使用处理C风格字符串的标准库函数时,牢记参数必须以结束符NULL结束;
二维数组:
6、C++规定,在声明和初始化一个二维数组时,如果对二维数组的所有元素都赋值,则第一维(行数)可以省略;
7、在C/C++中,二维数组按照行优先顺序连续存储,即先将第一行按顺序存储,再对第二行顺序存储;
8、一个二维数组元素a[x][y]在一维数组b中,是a[x][y]=b[x列数+y];
9、二维数组的动态声明:产生一个二维数组a[m][n]
int m = 5,n=3;
int a = new int [m];
for (int i = 0; i < m; i++)
{
a[i] = new int [n];
}
只能用a[i][j]或者((a+i)+j)来访问数组的元素;动态声明的数组,使用后需要释放内存:
for (i= 0; i < m; ++i)
{
delete []a[i];
}
delete []a;
数组指针和指针数组、数组名的指针操作
10、指针加上一个整数的结果是另一个指针,当一个指针和一个整数量进行算术运算时,这个整数量会根据指针的类型进行适当调整(3+float型的指针,结果是+34(4是float类型的大小))
11、C的指针的算术运算:1)指针+/-整数,用于指向数组中某个元素的指针,对一个指针加1使它指向数组中的下一个元素2)指针-指针,只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针,减去运算的值是两个指针在内存中的距离(无视数组类型,相隔几个元素即为几)
12、指针数组:元素为指针的数组数组指针:一个指向数组的指针
int a[10];//指针数组
int§[10];//数组指针
二维数组的数组名是一个数组指针
13、在表达式中使用数组名时,该名字会自动转换为指向数组首元素的指针
14、数组的首地址是常量,不可以进行赋值操作
15、当数组作为函数实参传递时,传递给函数的数组首元素的地址,而将数组某一个元素的地址当作实参时,传递的是此元素的地址,也就是子数组(以此元素作为首元素的子数组)首元素的地址;
16、
int a[4][5];
&a; //int()[4][5]
a + i; //int()[5]
(a + i); //int
((a + i) + j); //int
(a + i) = a[i];
((a + i) + j) = (a[i] + j) = a[i][j];
17、顺序表可以进行随机存取,插入算法、按值查找算法和删除算法的平均时间复杂度都为O(n),按地址、序号查找算法的平均时间复杂度为O(1)
18、cout输出时遇到’\0’时就不再输出

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值