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,即上面说的第二种类型;

————————————————————————————————————————————————————————————————————

0 0
原创粉丝点击