| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1146 人关注过本帖
标题:这两种代码的执行为什么会出现不同的结果呢?
只看楼主 加入收藏
getmylove
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-17
收藏
 问题点数:0 回复次数:6 
这两种代码的执行为什么会出现不同的结果呢?
如所示,两种代码的执行过程有什么区别呢?为什么一个失败一个成功过呢?
程序代码:
#include <stdio.h>
int main () {
    int i;
    int j;
    int *p;
    p=&i;
    ++p=&j;//执行出错
    return 0;
}

程序代码:
#include <stdio.h>
int main () {
    int i;
    int j;
    int *p;
    p=&i;
    ++p;
    p=&j;//执行成功
    return 0;
}



[此贴子已经被作者于2017-12-31 11:53编辑过]

搜索更多相关主题的帖子: 代码 执行 不同 结果 int 
2017-12-31 11:49
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
++p=&j; ++p不能作左值。
或者这样看:
int a[]={123,456,789};
int *p;
p = &a[0]; //这时p指向a[0]
++p; //这时p指向a[1],这是由系统决定的,不由你改变。
2017-12-31 15:04
getmylove
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-17
收藏
得分:0 
回复 2楼 吹水佬
++也可以作为左值啊,比如下面的代码执行正常
int _tmain(int argc, _TCHAR* argv[])
{
    int i=0;
    int j=0;
    ++j=i;  //++作为左值
    return 0;
}
2018-01-02 11:02
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用getmylove在2018-1-2 11:02:42的发言:

++也可以作为左值啊,比如下面的代码执行正常

可能是编译器不同,我这编译没通过。
#include <stdio.h>
main()
{
    int i=0;
    int j=0;
    ++j=i;  //++作为左值
}


[此贴子已经被作者于2018-1-2 11:18编辑过]

2018-01-02 11:15
笨蛋编程
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:65
专家分:131
注 册:2011-8-11
收藏
得分:0 
vs2010 哪个都没错

int main () {
    int i;
    int j;
    int *p;
    p=&i;
     printf("%d\n",p);
    ++p=&j;//执行出错
     printf("%d\n",p);
     p=&i;
     printf("%d\n",p);
     ++p;
    p=&j;//执行成功
     printf("%d\n",p);
     getchar();
    return 0;
}

输出:
2292728
2292716
2292728
2292716
2018-01-02 13:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
第一次看到这个帖子时,已经到了3楼,这是明显来无理取闹的,就没理。
然后又在zhihu上看到同样的帖子,更觉得是到处卖萌的。

我不吐不快
学过C的都知道 前置++ 操作符返回的是个右值
学过C++的都知道 前置++ 操作符返回的是个左值

单看他在问题中的描述,很正常(除了将“编译失败”瞎说成“执行出错”),于是二楼的『吹水佬』告诉他在C语言中++p不能作为左值。
但他在三楼,又贴出个++作左值编译通过的例子……,这是自己打脸来恶心别人吧?!

to 楼主:你在问题中的第一段代码 和 3楼的代码,一模一样,要么都编译失败,要么都编译成功。不要一个用C编译器编译,另一个用C++编译器,即使更换,也要明确都说出来。
2018-01-02 14:59
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
收藏
得分:0 
楼猪这不是狡辩么?你第1个是指针左赋值,举例是变量左赋值。2个不是一个事
2018-01-02 16:20
快速回复:这两种代码的执行为什么会出现不同的结果呢?
数据加载中...
 
   



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

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