c++指针和数组的千丝万缕
来源:互联网 发布:linux 清空arp缓存 编辑:程序博客网 时间:2024/06/06 05:28
提到c++中的指针,博主总是心惊胆战。貌似编译没有问题的程序,运行时总会崩溃,弹出个大红的叉叉,只能掩面泪奔,继续调试了。。。。废话少说,看了《c++ primer》,还是总结一下c++指针和数组这对兄弟千丝万缕的联系吧。
那些基本的概念就不讲了,直奔使用原则:
现在有如下定义,
int a[5]={0,1,2,3,4}
int *ip;
ip=a;
1、数组名是首元素的地址,也就是指针
2、指针加减整型数值,所得结果仍然是指针,可以对其进行解引用,*(ip+2)//指向了元素a[2];
3、下标运算符[ ]和相对偏移量共同作用可以解引用指针,比如:
ip=&a[3];
ip[1]//就是a[4];
ip[-2]//就是a[1];
c风格的字符串,即以NULL结尾的字符数组, 可以这样定义:
char *cp=“hello world”;
也可以
char s[]=“hello world”;
cout<<*cp;//输出的是字符串的首字母,因为数组名是首元素地址,解引用自然就是首字母
cout<<cp;//输出的是整个字符串
——————————————————————————————————————————————
指针和const,两种组合方式易混淆
1、const double *cptr=&dval;
这种指针可以看成 自以为指向常量的指针,即不能通过解引用而修改对象的值,但是可以通过其他方式,比如直接赋值修改dval;同时,cptr的指向也可以改变,即不指向dval
2、double *const ptr=&dval2;
————————————————————————————————————————————————————————————————
这种指针本身是个常量,即ptr的值确定,指向确定,不能修改,即使有ptr=ptr也不行,同时,必须在定义的时候初始化;但是dval2本身的值可以变化;
typedef string *pstring;
const pstring cstr;
问cstr是什么类型的?
要注意,typedef并非像include一样是文本的展开,因为pstring是指针类型,故其真正等价于 string *const cstr,即上面说的第二种类型;
————————————————————————————————————————————————————————————————————
- 指针和数组的千丝万缕(一)
- 指针和数组的千丝万缕(二)
- 指针和数组的千丝万缕(三)
- c++指针和数组的千丝万缕
- C语言指针、数组指针和指针数组的区别
- c/c++--指针数组和数组指针的区别
- 【C/C++】数组和指针的区别
- 局部变量和static的千丝万缕
- typedef struct 和struct 之间的千丝万缕
- c语言的指针数组和数组指针
- C语言中指针数组和数组指针的关系
- C指针数组和数组指针的内存布局
- C 数组指针和指针数组的区别
- C语言:数组指针和数组指针的理解
- c/c++中指针数组和数组指针的区别
- C语言指针数组和指向指针的指针
- 【c/c++】指针数组和数组指针
- c++---数组和指针
- TWaver HTML5学习笔记 —— 拓扑右键菜单
- 制作ios-framework
- UVa 755 487-3279
- (一)游戏实现的原理和机制
- JavaScript总结
- c++指针和数组的千丝万缕
- hdu 最大连续子序列
- 使用C++遍历文件夹/目录
- ANDROID实战经验之图像处理及特效处理的集锦(总结版)
- 转的推荐系统帖子
- hdu 命运
- 作业调度算法
- 新手笔记,小程序一
- Cocos2d-x 添加iOS7默认分享/AirDrop