指针杂记

    技术2024-01-12  111

    初学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
    Processed: 0.009, SQL: 9