`

一个牛逼的问题 哈哈 JAVA/AS3/C# 这里托管语言和C++/C的 代码解释差异

阅读更多
声明一个int型的i=0

i = i++;
打印i

C++/C 里面输出1

as3/java/c# 里面输出0

为什么呢???


嘻嘻

很明显 在AS3/JAVA/C#这种托管型面向对象语言中

当遇到这种声明时  我觉得他们在底层开辟了2个管道, 也就是再复制了有一个对象i 和原对象i
是2个 内存地址了 然后一个指针在指2个地址, 后i拷贝到前面的i上,  指针指导前一个上
但是++ 属于=后的管道i
所以 输出i=0;

而在C++ 中 i将会指向同一快内存地址 因此结果i


网上一个网友的解释:


java里的i++
iconst_0
istore_1
iload_1
iinc 1,1
istore_1

因为这里jvm会将i的初始值(0)暂存入堆栈,然后对变量区的i进行自加,而istore_1又会接着把堆栈的i(0)赋给变量区的i,所以最后i还是0,FP的情况应该是一样的,如果换成i=++i就会得到1,原因是因为i=++i是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈


我觉得更直接~  从底层说明了原因
分享到:
评论

相关推荐

    c#调用托管c++调用c++

    标题“c#调用托管c++调用c++”揭示了主要的技术路线:首先,C#代码会通过.NET Framework的托管环境调用C++的托管代码,然后,这部分托管C++代码会进一步调用非托管的C++ DLL。这种技术的应用场景广泛,例如,当需要...

    C/C++和C#混合编程

    以下是一个具体的实践案例,展示了如何通过托管C++实现C#对本地C++类的调用。 ##### 步骤一:准备本地C++类和函数 - **函数**:定义一个简单的算术加法函数`Add`。 - **类**:定义一个本地C++类`CClassNative`,...

    C++/java/C#语言的AES加密解密

    标题中的"C++/java/C#语言的AES加密解密"涉及到的是三种常用编程语言——C++、Java和C#在实现AES(Advanced Encryption Standard,高级加密标准)算法上的应用。AES是一种广泛使用的对称加密算法,它在信息安全领域...

    非托管C++调用C#的dll

    通常,C#调用C++编写的dll可以直接使用dllimport,但是C++调用C#编写的dll需要使用托管C++将C#的dll进行一次封装,然后由非托管C++调用封装好的dll。然而,CLR VIA C#提供了一种非托管C++直接调用的方法,该方法可以...

    c++ 转换 java c# 转换 java c++ 转换 c#

    C++/CLI是Microsoft为.NET设计的一个语言扩展,它允许C++开发者使用.NET的特性,如托管代码和垃圾回收。这个转换可能涉及到将C++的原生类型转化为C#的.NET类型,如将C++的结构体映射到C#的类。`CPlus_To_CShap_...

    使用托管C++粘合C#和C++代码

    托管C++是微软.NET框架提供的一种特性,它允许开发者在.NET环境中使用C++语言,同时能够无缝地与C#和其他.NET语言交互。这种技术的核心在于,托管C++编译后的代码能够理解并遵循.NET框架的规则,比如垃圾回收、类型...

    C++代码转制换为C#的工具

    标题 "C++代码转制换为C#的工具" 提示我们关注的是一个软件开发中的跨语言转换问题,特别是从C++编程语言到C#编程语言的代码迁移。C++和C#虽然都是面向对象的语言,但它们在语法、类库和运行环境上存在显著差异。...

    C#调用C++封装的托管对象

    在.NET框架中,C#是一种常用的编程语言,而C++则可以用于编写底层代码或封装非托管资源。在某些情况下,我们可能需要在C#应用中调用C++编写的库,尤其是当C++库提供了特定功能或者优化的性能时。这种跨语言互操作性...

    C#、托管C++、非托管C++编程

    托管C++可以创建一个“托管包装器”(Managed Wrapper),这个包装器就像是非托管代码和C#之间的中介。它将非托管的函数和数据结构转换为.NET兼容的形式,使得C#代码可以通过.NET的调用约定来调用这些加密函数。 ...

    C++代码转java工具

    C++到Java的转换可能涉及Java Native Interface (JNI),这是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。 至于压缩包内的文件“C++ to Java Converter.exe”很可能就是这个转换工具的执行程序,...

    C++头文件代码翻译为C#的工具

    压缩包中的"CLRInsideOut"可能是一个工具或文档,它可能详细介绍了如何在.NET Framework(使用CLR,即公共语言运行时)中实现C++和C#之间的互操作,包括使用P/Invoke(Platform Invoke)技术,这是.NET中实现非托管...

    JAVA调用C++/C#的DLL

    标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...

    C#调用C++ DLL 托管

    在.NET框架中,C#能够通过托管代码与非托管代码(如C++编译的DLL)进行交互。这种技术使得开发者可以利用C++库的强大功能,同时享受C#的高级特性和开发效率。本篇文章将深入探讨如何在C#中使用托管方式调用C++ DLL,...

    c/c++/java/c#程序员必备手册 api

    c/c++/java/c#程序员必备手册 api

    C#C++混合编程示例(C#调用非托管C++类)

    在IT领域,混合编程是指将不同编程语言的代码集成到一个项目中,以利用每种语言的优势。本示例着重于“C#C++混合编程”,即如何在C#环境中调用非托管(本地)C++编写的类。在.NET框架下,C#是一种托管语言,而C++...

    使用托管C++粘合C#和C++代码.pdf

    《使用托管C++粘合C#和C++代码》这篇文档主要讲述了如何通过托管C++来连接C#和C++的代码,实现不同语言间的互操作性。在.NET框架下,C#和C++可以利用托管C++进行交互,使得原本不兼容的两者能够共享数据和功能。 ...

    c++转换成c#代码

    将C++代码转换为C#代码涉及到对两种语言语法差异的理解以及对特定库和API的适配。以下是关于这个主题的一些关键知识点: 1. **类型系统**: - C++支持静态和动态类型,而C#是纯静态类型的。这意味着在C#中,所有...

    CLI/C++反射机制交互C#、C++

    在.NET环境中,跨语言互操作性是一个常见的需求,特别是在C#和C++之间。本文将深入探讨如何在C#中利用CLI/C++的反射机制来调用本地C++ DLL文件,实现两者之间的交互。 首先,我们需要理解CLI/C++,它是微软为C++...

    我们该使用何种编程语言?是C、C++、VB、Java还是C#?

    C、C++、VB(Visual Basic)、Java和C#都是广泛应用的编程语言,每种都有其独特的优势和适用场景。 C语言是基础且强大的低级编程语言,它的语法简洁,对内存管理有直接控制,因此在系统编程、嵌入式开发和游戏引擎...

    Demo: c/c++动态库(DLL)调用,c#等其他语言调用c/c++的DLL

    通常,C/C++ DLL会有一个头文件声明对外接口,一个源文件实现功能,而C#部分则会有一个或多个类,包含P/Invoke的委托定义和调用方法。 6. **注意事项**:跨语言调用时,需关注数据类型的映射,例如C++的指针和C#的...

Global site tag (gtag.js) - Google Analytics