Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C内存结构指针_C# - Fatal编程技术网

C# C内存结构指针

C# C内存结构指针,c#,C#,我正在开发一个内存读写器类,但我被它卡住了。 我的问题是,我想用结构指针修改其他进程内存值。 我知道如何用C++做,但不能用c 我目前的代码是: class CModifier { struct Data { int iMember; float fMember; } public CModifier() { Data data[62]; *data = 0x123456;

我正在开发一个内存读写器类,但我被它卡住了。 我的问题是,我想用结构指针修改其他进程内存值。 我知道如何用C++做,但不能用c</p> 我目前的代码是:

class CModifier
{
    struct Data
    {
        int iMember;
        float fMember;
    }

    public CModifier()
    {
        Data data[62];
        *data = 0x123456;

        // use them to modify values etc.
        data.fMember = 1.2345f;
    }
}
C确实允许对内存位置进行有限的访问,但实际上并不推荐这样做,而且只有在您知道其他系统(如垃圾收集)如何处理内存后,才应该尝试这样做。引用运算符&和反引用运算符*用于访问内存。您还必须在方法声明中使用不安全关键字。例如:

public unsafe void Method()
{
    int x = 10;
    int y = 20;
    int *ptr1 = &x;
    int *ptr2 = &y;
    Console.WriteLine((int)ptr1);
    Console.WriteLine((int)ptr2);
    Console.WriteLine(*ptr1);
    Console.WriteLine(*ptr2);
}

注意到还有其他更高级的事情要考虑,比如将内存位置钉住以阻止垃圾收集器在内存中移动对象,以及这个过程对堆栈堆的影响。


底线,使用指针引用,你自己的风险,只是作为最后的手段。

< P>我感觉C++专业人士会因为不使用正确的技术术语而抨击我的帖子,但是哦,好吧。 C有一个“不安全”修饰符,您可以使用它来调整指针代码,但在另一个位置修改结构的更好选项是“ref”关键字

<>我不能说——确切地说,你想完成的事情可以在C中完成,我不确定我会用C++理解它,但下面是我要怎么做的,正如你所描述的。
void ChangeMyStruct(ref Data etc) {
  data.fMember = 1.2345f;
}

void mainMethod() {
  ChangeMyStruct(ref dataOne);
}

*data=0x123456是无意义的,即使在C/C++.*data=0x123456;你想在这里实现什么?我错过了一些东西。另一个过程是从它的地址空间向您传递一个块,您正在处理它并将其传递回?C的全部要点是可读性。坚持使用数据[a+b+c]。如果你想有安全整数,浮点联合。。。你也可以吃。@leppie不,不是。。。他只是给指针的解引用设置了一个十六进制值。在你的答案前面加上语义等价物“我不知道我在说什么,但不管怎么说,这里有。这是一个大的红旗,你不应该试图回答这个问题。@ PieGeelkkes,我主要说我不知道C++,但是我相信我知道解决他的问题的有效方法是用他所问的语言。像Horton大象:说你的意思,“你说的话是真的。”PieGeelkks'我不确定我会用C++理解它——像这样。你的批评毫无帮助。