(1)px挨着自增自减
形式:
*px++或*(px++)
*++px或*(++px)
-前自增自减和前自增自减的优先级都比*的优先级高:就是说*px++其实是*(px++),而不是(*px)++。如例1
-*px++的结果是一个值,这个操作可以像例1写在外面,也可以像例2写在里面。
-前后自增自减还是有效果的,如例2的指针后移就在其他操作完成后执行,即*p_x++是先得到p_x所指向内存空间的值,然后指针++
【例子1】:
double x[3] = {1,5,9};
double *px = x;
printf("*px=%lf\t px=%p\n", *px,px);
*px++;
printf("*px=%lf\t px=%p\n", *px, px);
结果是:
*px=1.000000 px=008FF844
*px=5.000000 px=008FF84C
【例子2】:
printf("*px=%lf\t px=%p\n", *px,px);
printf("*px=%lf\t px=%p\n", *(px++), px);
结果是:
*px=1.000000 px=010FFC80
*px=1.000000 px=010FFC88
(2)px挨着*
形式:
(*px)++
++(*px)或++*px
-先取指针指向的值,然后指针指向的值加1.
-*px++的结果是一个值,这个操作可以像例3写在外面,也可以像例4写在里面。
-前后自增自减还是有效果的,如例4
【例子3】:
printf("*px=%lf\t px=%p\n", *px,px);
(*px)++;
printf("*px=%lf\t px=%p\n", *px, px);
结果是:
*px=1.000000 px=00EFF8CC
*px=2.000000 px=00EFF8CC
【例4】:
printf("*px=%lf\t px=%p\n", *px,px);
printf("*px=%lf\t px=%p\n", (*px)++, px);
结果是:
*px=1.000000 px=0093FD0C
*px=1.000000 px=0093FD0C
PS:
指针大小是4字节,不管什么类型的指针都是4字节。sizeof(px)=4
区分指针指向内容的大小,这个大小与指针指向的类型有关。比如下面的*px++后增加的8个字节就是double类型的原因。double的大小是8个字节(32位操作系统)