1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > *p++ (*p)++ *++p ++*p辨析

*p++ (*p)++ *++p ++*p辨析

时间:2024-02-10 02:29:26

相关推荐

*p++ (*p)++ *++p ++*p辨析

(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位操作系统)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。