现在的位置: 首页 > 综合 > 正文

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

2014年03月14日 ⁄ 综合 ⁄ 共 2012字 ⁄ 字号 评论关闭
文章目录

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

抱歉!评论已关闭.