《C++ Primier Plus》02

来源:互联网 发布:淘宝售假申诉代购小票 编辑:程序博客网 时间:2024/05/22 02:14


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


0 0
原创粉丝点击