C++ Primer 学习笔记——
第4章 数组和指针
数组和Vector的区别是:数组的长度是固定的,也就是说Vector的长度是可变的.这就是为什么objC有Array和MutableArray,即数组和可变数组一说.可见,可变数组是对c中数组的扩展.
数组和Vector的区别2:数组比Vector低级.也就是说,什么时候用数组.只有机器卡死的情况才用,不卡不用.
数组之于指针,相当于Vector之于迭代器.
见了鬼了,数组真难用,没有size,没有push_back,要改变长度,只能全部给新数组,既然这么没用,可以不学吗?
不到万不得已,千万不要用数组.
这要看情况?学的主要原因是,因为叔叔们在用,假定某一天项目的功能,恰好叔叔们曾经写过,我们拿来照抄,但要略微修改,这个时候看不懂就不好办,所以要会读会改.但我们自己不用.就像改AS2游戏,换换UI,难道改成AS3吗?同样的道理,数组就不该改成Vector.
4.1数组
不像JS,AS这些脚本语言一样自由.当然这种自由是以牺牲效率为代价的.
定义数组有很多规矩,重点是方括号中的数组长度.无非这2种情况
1,字面值如123567,
2,整型常量
3,变量和不是最先就定义好的常量不行
4.1.1数组的定义和初始化
1.显示初始化数组元素
2.特殊字符数组
3.不允许数组直接复制和赋值
定义数组并取数组值
4.1.2数组操作
数组大小有专门的类型(令人惊奇!),代替普通的unsigned,叫 size_t
//范例1 下标取值
int main (int argc, char * const argv[]) {
const size_t arr_size=3;
int arr[arr_size]={1,2,3};//初始化列表
for (int i=0; i!=arr_size; ++i) {
printf("%i",arr[i]);
}
return 0;
}
把arr_size改成6:
#include <iostream>
#include <string>
using std::string;
//范例1 整型数组下标取值
int main (int argc, char * const argv[]) {
const size_t arr_size=6;
int arr[arr_size]={1,2,3};//初始化列表
for (int i=0; i!=arr_size; ++i) {
printf("%i",arr[i]);
}
return 0;
}
输出123000,这很好理解,因为arr默认长度是6,实际填了3个:123,剩下的没填,就是000.
//范例2 字符数组下标取值
int main (int argc, char * const argv[]) {
const size_t arr_size=3;
char arr[arr_size]={'A','B','C'};//字符数组
for (int i=0; i!=arr_size; ++i) {
printf("%c",arr[i]);
}
return 0;
}
输出ABC.
#include <iostream>
#include <string>
using std::string;
//范例2 字符串数组下标取值
int main (int argc, char * const argv[]) {
const size_t arr_size=3;
string arr[arr_size]={ "A", "B" , "C"};//字符数组
for (int i=0; i!=arr_size; ++i) {
printf("%s",arr[i].c_str());
}
return 0;
}
4.2指针的引入
指针的标志是*, 星号, 解引用操作符 dereference operator
还可以用++ 增量, increment operator
#include <iostream>
#include <string>
using std::string;
//指针范例1 指针自增
int main (int argc, char * const argv[]) {
const unsigned arr_size=3;
int arr[arr_size]={1,2,3};//初始化列表
int *ip=arr;//取得指针
for (int i=0; i!=arr_size; ++i) {
printf("%i",*ip++);
}
return 0;
}
输出:123Running…
如果把const unsigned arr_size的值改成6,输出:
Running…
123000
#include <iostream>
#include <string>
using std::string;
int main (int argc, char * const argv[]) {
int arr[3]={1,2,3};//初始化列表
int *ip=arr;
printf("%i",*ip);
ip=arr;
int *ip2=ip+1;
printf("%i",*ip2);
int *ip3=ip+2;
printf("%i",*ip3);
return 0;
}