小编the*_*rge的帖子

C# for 循环反汇编中的无用变量与捕获委托?

我试图看一下这个老问题中发布的代码的反汇编,我发现了一些奇怪的东西。

为了清楚起见,这是源代码:

class ThreadTest
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 10; i++)
            new Thread(() => Console.WriteLine(i)).Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

(当然这个程序的行为是出乎意料的,这不是这里的问题。)

这是我在反汇编中看到的:

internal class ThreadTest
{
    private static void Main(string[] args)
    {
        int i;
        int j;
        for (i = 0; i < 10; i = j + 1)
        {
            new Thread(delegate
            {
                Console.WriteLine(i);
            }).Start();
            j = i;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在那里做什么j?这是字节码:

.method private hidebysig static 
    void Main (
        string[] args
    ) …
Run Code Online (Sandbox Code Playgroud)

c# closures for-loop disassembly

5
推荐指数
1
解决办法
180
查看次数

如何在这个答案中理解"q = i - 4;"的代码?

问题描述

数字序列定义如下:

f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Run Code Online (Sandbox Code Playgroud)

给定A,B和n,您将计算f(n)的值.

输入

输入包含多个测试用例.每个测试用例在一行上包含3个整数A,B和n(1 <= A,B <= 1000,1 <= n <= 100,000,000).三个零表示输入结束,并且不处理该测试用例.

产量

对于每个测试用例,在一行上打印f(n)的值.

样本输入

1 1 3
1 2 10
0 0 0
Run Code Online (Sandbox Code Playgroud)

样本输出

2
5
Run Code Online (Sandbox Code Playgroud)

#include <iostream>
using namespace std;

int f[54] = {0, 1, 1};
int main()
{
    int A, B, n, q = 1;
    while (cin >> A >> B >> n && …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

1
推荐指数
2
解决办法
220
查看次数

标签 统计

algorithm ×1

c# ×1

c++ ×1

closures ×1

disassembly ×1

for-loop ×1