初学C时,困扰我的问题:p,*p和&p的区别
**p:指针p所指向的地址。
*p:指针p所指向的地址的值,即此地址内存储的值。
&p:&是取地址运算符,所以其表示的是指针p本身的地址,注意与p区分开。**
指针p+1时,指针的值递增它所指向的类型大小,比如int,一般分配的存储单元为4字节,若指针p指向int型变量or常量的存储单元,p+1后,它本身的值就增加4字节。减法同理。*注意:本身的值与所指向的值要区分开,指针本身的值一般为指针的地址。*
设数组sometype a[m][n],需要注意的是a+1与a[0]+1不同,前者增加了两个sometype的存储空间,后者增加一个。除此之外*a+1与a[0]+1相同。
*(p++)与*p++等价,结合律从右向左,所以都是先对p++求值,之后再运算*p。
int **p:表示的是p指向了一个指向int的指针的地址。
**a(双重链接(double indirection)的例子)等价于a[0][0]。
int (*p1)[2]:指向一个内含两个int类型的数组。
int *p2[2]:p2是内含两个指针的数组,每个元素都是指向是int型数据的指针。
两个指向同一个sometype类型数组的指针求差时,比如p1-p2=2,表示的是两个指针所指向的元素相隔两个sometype,而不是2字节。
C语言中,通常情况下,数组后面第一个位置的指针有效。
const指针可以指向const(或者非const的数据地址)(或者const指针)。
只能把非const的数据地址赋值(或非const的指针)给非const指针,而const的数据(或指针)不行。
不能改变所指位置存储的值的指针:const double *p
不能改变位置的指针:double * const p;
既不能改变位置也不能改变值的指针:const double * const p
转载请注明原文地址:https://ipadbbs.8miu.com/read-47361.html