| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1590 人关注过本帖
标题:请教各位dalao一个指针问题
只看楼主 加入收藏
HuiProgramer
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-11
收藏
 问题点数:0 回复次数:6 
请教各位dalao一个指针问题
#include<stdio.h>
int main(void)
{
    int arr[]={6 ,7, 8, 9, 10 };
   
    int *p=arr;
    *(p++)+=123;
    //*(p++)=*(p++)+123;
    printf("%d,%d\n",*p,*p++);
    return 0;
}


#include<stdio.h>
int main(void)
{
    int arr[]={6 ,7, 8, 9, 10 };
   
    int *p=arr;
    //*(p++)+=123;
    *(p++)=*(p++)+123;
    printf("%d,%d\n",*p,*p++);
    return 0;
}
这两个输出的结果是一样吗?
如果不一样麻烦各位dalao给我一个详细的解释。
谢谢
搜索更多相关主题的帖子: 指针 int void printf return 
2017-10-11 12:53
李岚
Rank: 2
等 级:论坛游民
威 望:2
帖 子:19
专家分:72
注 册:2017-8-31
收藏
得分:0 
这两个结果肯定是不一样的
首先第一个式子*(p++)+=123
如果你拆成*(p++)=*(p++)+123就很容易看出了p++了两次,对于p+1是指偏移了一个类型的地址大小
所以第一个和第二个就会产生一个偏移的差距
所以第一个式子拆开就应该是 *(p++)=*p+123;
 
还有的就是输出的应该是8 7和9 7
这个输出就是从右向左看先算*p++,之后是*p


纯属个人见解
2017-10-11 13:34
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
这个问题不解释,因为同一个变量在一行内被++多次,这种做法有歧义,不要再这样写。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-10-11 14:08
李岚
Rank: 2
等 级:论坛游民
威 望:2
帖 子:19
专家分:72
注 册:2017-8-31
收藏
得分:0 

#include<stdio.h>
int main()
{
    int arr[]={6,7,8,9};
    int *p=arr;

   // *(p++)+=123;
    *(p++)=*p+123;
    //arr[]={129,7,8,9}
    *(p++)=*(p++)+123;
    //arr[]={129,7,8,9}   
    printf("%d,%d\n",*p,*p++);
    return 0;
}
2017-10-11 15:13
HuiProgramer
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-11
收藏
得分:0 
回复 2楼 李岚
感谢大佬解惑,懂了。就这里一直把我搞得迷迷惑惑,感谢
2017-10-11 15:27
HuiProgramer
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-11
收藏
得分:0 
回复 3楼 forever74
好的,感谢提出意见
2017-10-11 15:27
HuiProgramer
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-11
收藏
得分:0 
回复 4楼 李岚
dalao,你的这段代码结合一楼的dalao给我说的让我更清晰的明白了。
感谢。
2017-10-11 15:30
快速回复:请教各位dalao一个指针问题
数据加载中...
 
   



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

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