试着用指针理解这句话

 dengyuanc_928 发布于 2022-12-08 19:50

我想知道为什么我有这个输出.

a[0]: 5, a[1]: 5, ptr: 5

从这个小程序.

#include 

int main() {
    int a[2] = {5, 10};
    int *ptr = a;

    *ptr = *(ptr++);

    printf("a[0]: %d, a[1]: %d, ptr: %d\n", a[0], a[1], *ptr);

    return 0;
}

我不理解的部分是.

*ptr = *(ptr++);

因为根据我应该发生的事情是,PTR应指向10,仅此而已,因为++后缀应该增加配置后PTR,所以按照我这个应该分配的值[0]到[0](哪个不会影响任何东西)并且在这个ptr之后应该指向[1]上的10,但真正发生的是最后一个[1]也是5,有人可以向我解释这个吗?

1 个回答
  • 你所看到的是未定义的行为.该语言不保证首先评估LHS还是首先评估RHS.平台可以选择首先评估哪一方.

    在您的平台中,首先评估RHS.

    RHS的价值是5.副作用是ptr指向a[1].

    然后,它被分配给*ptr,即a[1].

    注意事项 由于编译器可以执行任何选择,因此在现实世界中强烈建议不要使用这种编程风格.请参见http://en.wikipedia.org/wiki/Undefined_behavior.

    2022-12-11 03:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有