首页 > 代码库 > C++ Primer(第四 五 六章)
C++ Primer(第四 五 六章)
数组与指针
- 数组 vs vector:数组长度固定 且不知道数组长度;数组不能直接复制或者赋值 vector可以
- 字符数组特殊性:char chr1[3]={‘c‘,‘+‘,‘+‘};char chr2[4]="c++";后者会在最后方式放上null字符,表示字符数组结束,需要比字符数量+1个长度
- 数组下标索引:下标类型是size_t(unsigned整型 足够大) 指针索引:类似vector中迭代器索引
- 应该尽量避免使用数组和指针 容易出错 c++中应该多用vector 迭代器 string等来代替
- 指针:string *str; 与 string* str;二者均可,通常使用前者,string *str1, *str2(二者都是指针); srting* str1,str2(让人误以为二者都是指针 实际上只有str1是的);
- 指针:一定要初始化,在指向对象还没有建立的时候可以初始为0/NULL, NULL是从C语言中继承来的,是预处理变量,编译时处理为0,NULL并不是std空间的 不需要std::NULL
- void *指针:特殊性 可保存任何类型对象的地址,但不能用来操纵它指向的对象
- 指针引用区别:引用必须初始化 且只指向一个对象 赋值操作的意义不同
- 表达式中使用数组名会自动转化为指向数组第一个元素的指针
- 指针相减得到数据类型为 ptrdiff_t(signed整型 足够大)
- const指针 指向const对象的指针 指向const对象的const指针
const int *a;//对象为const 指针可另外指向 但是不能通过指针来修改对象的值int *const a;//指针为const 指针指向不能修改 指向对象的值可以修改const int *const a;//指向const对象的const指针const int i=1;int *p=&i;//error 不能把一个const对象的地址 赋值给一个普通的 指向非const对象的指针void *p=&i;//errorconst int*p=&i;//okconst void *p=&i;//ok
//pstring是字符串指针 const修饰pstring 修饰的是一个指针 因此是常量指针 而不应该按照字面扩展来理解 typedef string *pstring;const pstring cstr;//cstr是string *const类型 下述三种表达是相同的意思
string *const sctr;
pstring const sctr; - 动态数组:动态数组 在运行时才决定数组长度 堆空间用于存储动态分配的对象 new delete实现 需要delete释放空间才可以 string *str=new string[n]();delete [] str;
- 新旧代码的兼容:string中所有使用字符串字面值的地方都可以使用c风格的字符串代替 反之 不行;使用数组初始化vector;
char *chr=str;//error const char *chr=str.c_str();//返回的是const指针 防止chr指针修改str对象int arr[]={0,1,2,3,4,5};vector<int> ivec(arr,arr+6);//用数组初始化vector 放入第一个元素和最后一个元素的指针
- 多维数组:即数组的数组 并没有实际上的多维数组 row行 column列
int ia[3][4];int (*ip)[4]=ia;//ip指针指向 int[4]一个指向4个元素的数组的指针 最多可以ip+2为止ip=&ia[2];int *ip[4];//长度为四的数组 数组元素类型为int* typedef int int_array[4];//typedef 简化多维数组的指针int_array *ip=ia;
c风格字符串
- C++支持c风格的字符串 但是不应该在c++中用 容易带来大量安全问题
- 字符串字面值的类型是const char类型的数组
- c风格字符串 不是C语言类型 也不是c++类型 是以空字符结束的字符数组 char chr[]={‘c‘,‘+‘,‘+‘,‘\0‘};char chr[]="C++";char *chr="C++";均是c风格字符串。若不加null 则不是。(const) char*来操作c风格字符串 标准库cstring是c++中包含处理出风格字符的标准库(与string.h c中字符串库内容相同)
- 数组需要告知其长度 否则无法自己获取其长度; 字符数组在没有加空字符的情况下也不知道数组长度 但c风格字符串可以通过空字符遍历来获取长度 因此c风格字符串是有对应函数可以调用; 需要注意 输入s为非零有空字符的字符串 且目标字符串需要有足够大的空间;strn开头的函数是比strcpy strcat安全,能够控制复制字符的个数
strlen(s);//返回长度 不包含空字符strcmp(s1,s2);//相等返回0 s1>s2 返回正数 否则返回负数strcat(s1,s2);//拼接到s1 并返回s1strcpy(s1,s2);//拷贝给s1strncat(s1,s2,n);//将s2的前n个字符拼接到s1strncpy(s1,s2,n);//将s2的前n个字符拷贝到s1
C++ Primer(第四 五 六章)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。