Tag: 指针

generics指针?

好吧所以我想创建一个将改变数据类型值的generics类。 我想这样做的原因是我可以使用undo和redo方法。 我可以为我需要的每种值类型编写一个类。 IE double,int …但如果我可以创建一个通用类来做这件事会容易得多。 这就是我所拥有的 class CommandChangeDouble : Command { double _previous; double _new; double* _objectRef; public unsafe CommandChangeDouble(double* o, double to) { _objectRef = o; _previous = *o; _new = to; *_objectRef = _new; } public unsafe void Undo() { *_objectRef = _previous; } public unsafe void Redo() { *_objectRef = _new; […]

用C#指示生成int数组?

以下C ++程序按预期编译和运行: #include int main(int argc, char* argv[]) { int* test = new int[10]; for (int i = 0; i < 10; i++) test[i] = i * 10; printf("%d \n", test[5]); // 50 printf("%d \n", 5[test]); // 50 return getchar(); } 我能为这个问题做出的最接近的C#简单示例是: using System; class Program { unsafe static int Main(string[] args) { // error […]

DotNet – 什么是int *?

简单的问题,我导入一个DLL函数,参数是int *。 当我尝试输入Method(0)时,我收到一个错误,上面写着:“int和int *无法转换”。 那是什么意思?

不能取给定表达式C#指针的地址

在不安全的上下文中考虑以下代码: string mySentence = “Pointers in C#”; fixed (char* start = mySentence) // this is the line we’re talking about { char* p = start; do { Console.Write(*p); } while (*(++p) != ‘\0’); } Console.ReadLine(); 这很好用。 根据http://msdn.microsoft.com/en-us/library/f58wzh21(v=VS.100).aspx我应该能够替换我标记的行 fixed(char* start = &mySentence[0]) 但不幸的是VS给了我以下错误。 无法获取给定表达式的地址 错误在我身边吗? VS.NET 2010 Premium。

C#是否使用 – >指针表示法?

我正在尝试学习C#,我熟悉C ++ struct指向符号 – >我很好奇是否可以转换到C#。 例: someStruct->someAttribute += 1;

C#:使用generics来创建指针数组

下午所有, 如果你愿意,请帮助一下。 为了规避.NET中的2Gb对象限制,我创建了一个在堆上分配内存的类,这允许我创建最多可达RAM空间的数组。 然而,为了便于开发(因为它是一个概念certificate),它很难编码为多头。 现在它工作了我一直在尝试改变代码使用generics,所以我可以使用相同的代码多种类型。 在分配内存并正确索引数组时,我需要一个与数组相同类型的指针数组,即长数组需要long*[] myLargeArray 。 问题是当我使用generics时,这个声明变成T*[] myLargeArray ,它总是产生错误‘不能获取地址,获取大小,或者声明指向托管类型的指针(’T’)’ 提前致谢。 PS在有人问之前,是的,我确实需要这么大的arrays。 2D数组的代码示例: LargeArray myArray = new LargeArray(x, y); public unsafe class LargeArray where T : struct { … private T*[] tArr; … public LargeArray(long sizeI, long sizeJ) { … myLargeArray = new T*[sizeI]; … } }

在C#中将字符串数组编组为char **

我正在调用C DLL函数,需要提供以下C结构: typedef struct { char *mTableId; char **mFieldNames; int mNumFields; char *mFilter; char *mSort; int mOffset; int mMaxRecords; char *mTargetRecordFilter; int mSurroundingRecordsCount; int *mOwnerIds; int mNumOwnerIds; gsi_bool mCacheFlag; } SAKESearchForRecordsInput; 问题在于char ** mFieldNames; 我试过像这样自动编组: [MarshalAs(UnmanagedType.LPArray,ArraySubType = UnmanagedType.LPTStr,SizeConst = 9)] public String [] mFieldNames; 这样我在Marshal.SizeOf()中得到一个错误 – 无法计算正确的大小。 然后我决定手动处理指针。 它实际上只是指向C字符串数组的指针。 这是我的代码导致的 System.AccessViolationException:尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。 所以我搞砸了指针。 代码对我来说似乎没问题,bug在哪里? C#: […]

C#中的ref和out是否与C ++中的指针相同?

我只是用C#做了一个Swap例程: static void Swap(ref int x, ref int y) { int temp = x; x = y; y = temp; } 它与C ++代码的作用相同: void swap(int *d1, int *d2) { int temp=*d1; *d1=*d2; *d2=temp; } 那些ref和out关键字如C#的指针而不使用unsafe代码?

LRESULT,WPARAM和LPARAM是什么意思?

我正在导入WinApi函数,在C#中编写回调等( 例子 )并且总是想知道: 他们的意思是什么 ? LRESULT作为最后的结果 ? W-PARAM? L-PARAM? 如何安全地“包裹”它们 WPARAM和LPARAM有时包含结构。 所以我需要将它们用作IntPtr 。 LRESULT怎么样? 我对int或更好的IntPtr安全吗? 我在C#中使用什么类型的LRESULT? int还是IntPtr ?

C#中的字符串不变性

我很好奇StringBuilder类是如何在内部实现的,所以我决定查看Mono的源代码并将其与Reflector的反汇编代码进行比较。 从本质上讲,Microsoft的实现使用char[]在内部存储字符串表示,并使用一堆不安全的方法来操作它。 这很简单,没有提出任何问题。 但当我发现Mono在StringBuilder中使用一个字符串时,我很困惑: private int _length; private string _str; 第一个想法是:“多么无谓的StringBuilder”。 但后来我发现可以使用指针改变字符串: public StringBuilder Append (string value) { // … String.CharCopy (_str, _length, value, 0, value.Length); } internal static unsafe void CharCopy (char *dest, char *src, int count) { // … ((short*)dest) [0] = ((short*)src) [0]; dest++; src++; } 我曾经在C / C ++中编程一点,所以我不能说这段代码让我很困惑,但我认为字符串是完全不可变的(即绝对没有办法改变它)。 所以实际的问题是: 我可以创建一个完全不可变的类型吗? […]