C++ Primer 学习笔记——第4章 数组和指针

来源:互联网 发布:百度seo是什么 编辑:程序博客网 时间:2024/06/05 00:51

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;}




原创粉丝点击