您的位置:首页 > 编程语言 > C语言/C++

《C++ Primier Plus》02

2015-08-04 08:12 537 查看


1. 数组的动态联编和静态联编

使用数组声明来创建数组时,将采用静态联编(即数组的长度在在编译时设置),使用new[]创建数组时,将采用动态联编(即运行时为数组分配空间),长度也在行时确定。这种数组使用完后,应使用delete[]释放占用的内存。

2. 数组表示法和指针表示法

用方括号数组表示法等同于对指针解除引用。

int tacos[10];

tacos[0] meas *tacos

tacos[3] means *(tacos + 3)

指针和字符串:

程序分析:

int main()
{
	char animal[20] = "bear";
	const char * bird = "wren";
	char * ps;
	 
	cout << animal << "and";
	cout << bird << "\n";

	cout << "Enter a kind of animal:";
	cin >> animal;//写入的时候是从第一个字符开始的
	//cin >> (animal + 4);//改变写入的起始位置
	
	//输入的时候,你会发现无论是你输入了一个
	//比原来长的字符串还是短的字符串,cout的时候
	//都是新的,而不会夹杂着原来的某些字符,是不是
	//在输入的时候数组被清空了呢!?
	//实际上并不是被清空了,字符是被替换了,但是,在你输入
	//完成的时候会多输入一个结束字符,也就是'\0',当字符读取的时候
	//读到这个字符就结束了,所以,即使后面还有字符,编译器也默认没有字符了
	//animal = {'b','e','a','r'} ;//剩下的字符都是'\0'
	//输入'a'和'b'
	//animal = {'a','b','\0','r','\0'};这样就有了源程序输出的效果
	ps = animal;
	cout << ps<<"\n";
	cout << "Before using strcpy():\n";
	cout << animal << "at" << (int *)animal << endl;
	ps = new char[strlen(animal) + 1];
	int size = sizeof(animal) + 1 ;
	strcpy_s(ps,size,animal);//拷贝animal的内容到ps中

	cout << "after using strcpy\n";
	cout << animal << "at" << (int *)animal << endl;//animal的内存地址操作前后不变
	cout << ps << "at" << (int *)ps << endl;//内存地址与animal不同,说明是两个不同的内存区域
	
	system("pause");
	delete[] ps;
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: