从C+迁移+;到C#,与指针相关 我是C++程序员,我正在研究一个迁移项目,我需要把C++代码转换成C语言,而我对C语言的知识很少。 我正在迁移的C++代码有很多指针操作,比如 Hdr->States = (DspState*)baseAddress; // Converting the buffer to other type.

从C+迁移+;到C#,与指针相关 我是C++程序员,我正在研究一个迁移项目,我需要把C++代码转换成C语言,而我对C语言的知识很少。 我正在迁移的C++代码有很多指针操作,比如 Hdr->States = (DspState*)baseAddress; // Converting the buffer to other type.,c#,c++,pointers,C#,C++,Pointers,我的问题是, 如果我在C#中进行不安全的编程,只要我正确地跟踪内存,有什么危害吗 或者在C#中是否有其他方法来处理此类指针操作(有时是双指针) C授权不安全上下文以允许指针的使用,因此如果代码在C++中工作,它应该在C++中做得很好,但是根据您想做的事情,它不是最好的解决方案。 如果使用C++中存在的C++库,则可能需要在C++中使用指针,而使用C引用。 如果你在POST中显示的操作是唯一使用的,那么我认为你不应该使用不安全的上下文来引用和取消引用指针,而应该对代码进行完整的会话。 < P>如

我的问题是,

  • 如果我在C#中进行不安全的编程,只要我正确地跟踪内存,有什么危害吗
  • 或者在C#中是否有其他方法来处理此类指针操作(有时是双指针)
  • C授权不安全上下文以允许指针的使用,因此如果代码在C++中工作,它应该在C++中做得很好,但是根据您想做的事情,它不是最好的解决方案。 如果使用C++中存在的C++库,则可能需要在C++中使用指针,而使用C引用。


    如果你在POST中显示的操作是唯一使用的,那么我认为你不应该使用不安全的上下文来引用和取消引用指针,而应该对代码进行完整的会话。

    < P>如果你将一个项目从C++移植到C语言,你的第一个目标应该是完全地使用托管代码的安全世界。 仅仅因为你在C++代码中使用指针并不意味着你必须在C语言中做同样的事情。C#中的不安全代码实际上应该是您最后的选择,并且只有在非常特殊的情况下才有必要

    示例中的代码与C#中的代码类似,不需要任何指针或不安全的操作

    BaseAddress baseAddress = ...
    Hdr->States = (DspState)baseAddress;
    
    或作为类型检查的强制转换操作

    Hdr->States = baseAddress as DspState;
    

    C#/.NET一直在使用引用,这在某种程度上类似于指针,但没有指针算术的危险。

    如果你要重构代码,我会采取一些小步骤来实现这个目标。从打算重写的代码的C++/CLI包装开始。开始将业务逻辑捕获到C中,并在必要时重写代码。@Romoku:我不是在重构代码。它完全是由C++开发到C语言的项目。如果C++代码分配了后来用作特定类型的非类型缓冲区,那么也许你应该修改代码,以创建它们在分配时需要的确切类型(类)的缓冲区。这是模板代码吗?