指向常量的指针:
const int *p; int const *p;
指针p的指向可以改变,但是指针p指向的变量的值不能通过p来改变。
const int *p = &a; p = &b; //正确 (*p)++; //不会报错但是不能改变p指向的变量的值
const指针:
int * const p;
指针的指向在声明时确定后就不能更改,但是可以改变指针指向变量的值。
int * const p = &a; //声明时必须确定指针的指向 (*p)++; //可以改变指针指向变量的值 p = &b; //会报错,无法改变const指针的指向
结论:const在*左边,指针的指向可以改变,指针指向的变量的值不能通过指针改变(可以通过其他方法更改变量的值),很多函数的参数类型就是const type *,就是为了防止在函数中改变指针指向变量的值;const在*右边,指针的指向不能改变,声明时必须确定指针的指向,指针指向的变量的值可以改变。
附加:
*运算符和++,--,->的使用。
*p++ 先执行指针+1,然后对指针执行间接访问运算;++*p先执行间接运算,然后对间接运算得到的结果+1。(--运算符相同)
struct test{ int a; char c; };
struct test *q;
++q->a; 先执行->运算再对a执行++运算。
q++->a; 先对q进行++运算然后再执行->运算。(--q->a和q--->a类似吧)