《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; }
相关文章推荐
- 设计模式C++学习笔记之十(Builder建造者模式)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式C++学习笔记之八(Adapter适配器模式)
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 设计模式C++学习笔记之六(Facade门面模式)
- 设计模式C++学习笔记之五(Factory Method工厂方法模式)
- 设计模式C++学习笔记之四(Multition多例模式)
- 设计模式C++学习笔记之三(Singleton单例模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- C语言的格式化输入函数scanf
- c++编译链接
- C++ 理解函数对象与lambda表达式
- Win32 服务控制
- 学习C++11之引用
- c++编译链接过程
- c++线程池
- Google C++ Coding Style:右值引用(Rvalue Reference)
- 计数排序C语言实现
- c++11移动语义右值引用