c++ 指针的一点理解

指针的申明int *a;

指针变量的值必须是一个地址值,即描述内存地址的值;使用&来取地址,c++ primer上的描述是:当此操作符用于一个对象上时,返回的是该对象的存储地址。

可以在申明指针时赋值如:int *a=&b;也可以申明后再赋值如:a=&b;这里的a是一个地址值的变量(或者说是一个指针变量),保存内存地址的值。

而*a=&b;是错误的(因为&b的值类型是指针类型不是整数),这里的*a表示的是指针指向的那个int值。我们可以写为*a=(int)&b;这句代码的含义是将变量b的内存地址转换为整数赋值给指针a指向的int变量。

不能直接将值取地址如:a=&5;是错误的。

还可以对指针a取址,返回的是一个指向指针的指针,如:int **b=&a;

也可以对指针指向的对象取址,如:int *b=&(*a);该语句申明了一个新的int指针b,指向指针a指向的变量,即存储的地址值是a指向的变量的地址。

可以对指针进行地址操作,如a+1;该语句的含义是指针a指向的对象的最后一位存储地址加一,如:a是int指针就是a的地址加4,因为a是int类型指针,需要用4个地址位来保存int类型,如果a是int数组,a+1也表示a指向的数组的存储地址的最后一个地址加一。

而(int)a+1表示的则是指针a的地址值加一。

注意,void *指针无法进行加一运算,因为它的类型不确定,如:void *c=a;void *d=c+1;这2条语句无法编译通过,但void *d=(int *)((int)c+1);是可以编译通过的,因为该语句是将c的地址值加一。

不知道在c中有没有什么区别。

posted on 2010-12-09 09:00  漫步人生  阅读(447)  评论(0编辑  收藏  举报