C++数组(2)--指针和数组
来源:互联网 发布:时间闹钟提醒软件 编辑:程序博客网 时间:2024/06/05 14:14
1.数组标准库函数begin和end
这两个函数与容器中的同名函数相类似,得到数组首指针和尾指针.数组不是类类型,所以不是成员函数.需要注意的是尾指针不能解引用和递增操作.
int a[5] = {1,2,3,4,5};int *beg = begin(a); //beg指向a首元素的指针int *last = end(a); //last指向a尾元素下一位置的指针while(beg != last){ cout << *beg << endl; ++beg;}
2.数组指针运算
1.指向数组的指针可以执行所有迭代器运算,包括自增,自减,比较,解引用,与整数相加,两个指针相减等.
2.一个指针加(减)一个整数,结果任然是指针,新指针指向的元素与原来相比前进(后退)了整数个位置.
3.两个指针指向同一个数组的元素或尾元素下一个位置,就可以进行比价和加减运算,如果两个指针分别指向不相干的对象,则不能比较.指针相减得到一种名为ptrdiff_t的标准库类型.
4.对数组进行运算实际上是对指向数组元素的指针进行下标运算.(标准库下标为无符号,内置下标可以为负数).
int a[5] = {1,2,3,4,5}; //含有5个整数的数组int i = a[2]; //把第3个值赋值给iint *p = a; //p指向a的首元素i = *(p+2); //等价于i=a[2]int *q = &a[2]; //q指向索引为2的元素int j = q[1]; //q[1]等价于*(q+1),即a[3]int k = q[-2]; //q[-2]指向a[0]
3.c风格的字符串
C++支持C风格字符串,但是最好不要使用,容易因为内存越界引起程序漏洞.C风格字符串不是一种类型,而是为了表达和使用字符串的一种写法,以空字符结尾,通常用指针操作.
4.c标准库String函数
使用此类函数的字符串必须以空字符结尾,否则函数会一直寻找空字符,出现不可预料的结果.并且c风格字符串很容易造成内存越界,有着严重的安全漏洞.
strlen(p); //返回p的长度,不计算空字符strcmp(p1,p2); //比较p1,p2,p1=p2返回0,p1>p2返回正数,p1<p2返回负数strcat(p1,p2); //将p2附加到p1结尾,返回p1strcpy(p1,p2); //将p2拷贝给p1,返回p1char ca[] = {'c','+','+'}; //不以空字符结尾cout << strlen(ca) <<endl; //错误:ca没有以空字符结尾
5.与旧代码的接口
很多C++程序在标准出现以前就写好,肯定没有使用string和vector类型,而且有些程序实际上就是C++和C的接口,也无法使用C++标准库,所以现在C++程序不得不与充满数组和C风格字符串的代码衔接,C++提供了一组功能.
1.混用string对象和C风格字符串
*允许使用以空字符结尾的字符串初始化string对象或为string对象赋值.
*在string加法运算中允许以空字符结尾的字符串作为其中一个对象(不能两个都是).
以上性质不能反过来,所以为string提供一个c_str()的成员函数.
char *str = s; //错误,不能用string对象赋值char*const char *str = s.c_str(); //正确
2.使用数组初始化vector对象
*不允许使用vertor对象初始化数组,但是允许数组初始化vector对象.
int p[] = {1,2,3,4,5};vector<int> ivec(begin(p),end(p));vector<int> subVec(p+1,p+4); //使用部分数组创建对象,p[1],p[2],p[3]
6.建议
尽量使用标准库类型而非数组,使用指针和数组容易出错,一是指针常用底层操作,容易引起细节错误.二是语法错误,特别是声明时.
现在C++应尽量使用vector和迭代器,避免使用内置数组和指针,尽量使用string类型变量,避免C风格字符串.
- c 数组 和 数组指针
- 【c/c++】指针数组和数组指针
- c++---数组和指针
- C 指针和数组
- C -- 数组和指针
- C++:数组和指针
- C 指针和数组
- C:数组和指针
- C:指针和数组
- 《C和指针》- 数组
- C指针和数组
- 指针数组和数组指针(C)
- 指针数组和数组指针(C)
- C指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- Caffe训练时出现Aborted ** using GNU date ** core dumped问题解决记录
- 乘法逆元的几种求法总结
- 顶级域名和子级域名之间的cookie共享
- DataTables Requested unknown parameter 'id' for row 0, column 0.
- php 各种框架优缺点
- C++数组(2)--指针和数组
- Coursera吴恩达《神经网络和深度学习》课程笔记(3)
- Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)
- java se day12 火推
- 2017-11-7课堂作业
- 2017-11-06
- Request/Response
- swap分区&磁盘加密&加密磁盘永久挂载
- Failed building wheel for uwsgi