标题:指针运算优先级的问题
只看楼主
scibar
Rank: 1
等 级:新手上路
帖 子:25
专家分:6
注 册:2018-4-23
结帖率:80%
已结贴  问题点数:20 回复次数:1 
指针运算优先级的问题
#include <stdio.h>
int data[2]={100.200};
int moredata[2]={300,400};
int main(void)
{
    int * p1,* p2,* p3;
   
    p1 = p2 = data;
    p3 = moredata;
    printf("*p1 = %d, *p2 = %d, *p3 = %d\n", *p1,  *p2, *p3);
    printf("*p1++ = %d, *++p2 = %d, (*p3)++ = %d\n",  *p1++,  *++p2,  (*p3)++);
    printf("*p1 = %d, *p2 = %d, *p3 = %d\n",  *p1,  *p2,  *p3);

    return 0;
}

第一行输出:p1=p2=data表示将数组data首元素的地址给指针p1和p2,p3=moredata同理。所以p1和p2所指向的值相同。p1p2和p3他们所指向的值分别是100和300。
第二行输出:*p1++表示先运算出指针p1所指向的值,然后指针p1自增加1,所以*p1++ =100。*++p2表示指针p2先自增加1,然后再算p2所指向的值,所以*++p2= 200。
(*p3)++ 在书上的最终结果是300,我自己输入代码显示结果也是300。(*p3)++不是表示先运算出p3所指向的值,然后指向的值自增加1。所以(*p3)++ = 301吗?
我现在不理解第二行输出的(*p3)++ = 300和第三行输出的*p3 = 301。
请大家帮我解释一下
搜索更多相关主题的帖子: 指针 运算 data 表示 指向 
2018-05-03 20:45
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:20 
++作用于*p3自身,*p3作为一个整体自增1,正常来说可以理解~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-03 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486605-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.656246 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved