我对执行流程感到震惊,任何人都可以帮助我

自律

我很困惑如何为以下代码执行表达式。

#include<stdio.h>
int main()
{
  int a[10];
  a[0] = 1;
  a[1] = 2;
  printf("%d  %d",a[0],a[1]);
  a[0] = a[0]  - (a[0] = a[1]); // not able to understand its flow of execution
  printf("\n%d  %d",a[0],a[1]);
}

这个的输出是

1 2

-1 2

我的疑问是括号内的赋值运算符在哪里执行并更改 a[0] 元素,并在表达式中使用,例如

指数:0 1

元素:1 2

期间表达式 : 2 2 // 当 (a[0] = a[1])

a[0] = a[0] - (a[0] - a[1]);

[0] = 1 - (2);

[0] = -1;

(或者)

指数:0 1

元素:1 2

期间表达式 : 1 2 // 当 (a[0] = a[1])

a[0] = a[0] - (a[0] - a[1]);

[0] = 1 - (2);

[0] = -1;

此外,关联属性也混淆了表达式是从左到右还是从右到左。

基思·汤普森

您的代码具有未定义的行为

a[0] = a[0]  - (a[0] = a[1]);

就其本身而言,子表达式(a[0] = a[1])是有效的。它分配a[1]to的值a[0],并产生分配的值

问题是在单个表达式中a[0]修改了两次,并且两次修改没有顺序,这意味着语言不会告诉我们哪个先发生。(在 C90/C99 术语中,两个修改不由序列点分隔。)

一个更简单的例子:

x = 2 + (x = 1);

这里x修改了两次。该语言并不仅仅说这两种修改可以按任一顺序发生;它说行为是未定义的。换句话说,语言没有说明会发生什么。它可能会崩溃,它可能会给你一些垃圾结果,或者,最糟糕的是,它可能会做你期望它做的事情。(这是最糟糕的情况,因为这意味着您仍然存在一个难以检测和诊断的严重错误。)

底线:无论这行代码打算做什么,肯定有一种更清晰、更明确的方法来做到这一点。你问题中的代码,不要太苛刻,甚至可能不是C。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

减少函数执行 - 任何人都可以帮助我识别错误,因为我无法获得结果

任何人都可以通过 PySimpleGUI 帮助我编写代码完成此操作

任何人都可以帮助我在 intelliJ 中使用 GUI 页面

任何人都可以帮助我通过 CSS 对齐图标吗?

任何人都可以在以下情况下帮助我在DAC上

任何人都可以帮助我理解下面代码中的问题吗?

任何人都可以帮助我进行 webpack 配置吗?

任何人都可以在用户界面风格定位方面帮助我

任何人都可以帮助我进行以下 SQL 查询吗?

任何人都可以帮助我解决 Hibernate 和 JSF 的这个缺点吗?

任何人都可以通过PIPELINED函数帮助我吗?

在viewpost.php遇到错误,任何人都可以帮助我

任何人都可以帮助我们解决这些 Xcode 错误吗?

任何人都可以帮助我使用 keras 合并层

任何人都可以帮助我在 jQuery 中进行修剪吗?

任何人都可以帮助我在颤振中对齐布局吗?

任何人都可以帮助我如何编写这行代码。我想在 jsx 中使用 map

我希望 div 是透明的,但不是 div 内的按钮。任何人都可以帮助我吗?

Java并发-任何人都可以帮助我进行输出。为什么列表为空?

什么是 P2P 和网状网络?任何人都可以帮助我吗?

任何人都可以帮助我理解,redux 在现实生活中的实际用途是什么?

任何人都可以帮助我:android.database.sqlite.SQLiteException:接近“,”:语法错误(代码1):,

任何人都可以帮助我解决尝试使用dll打开端口时遇到的此错误

任何人都可以在C ++中使用if语句和字符串来帮助我吗?

任何人都可以帮助我解码 SSIS 派生列中的条件(?)运算符

任何人都可以帮助我有关SQL查询的问题(在哪里)

任何人都可以帮助我使这个 java 运行没有错误吗?

任何人都可以帮助我在 php 的 foreach 循环中使用 json 数据吗?

任何人都可以帮助我修复响应式 HTML 手风琴吗?