C# 指针学习笔记之fixed 语句
2023-09-14 09:02:13 时间
fixed 语句设置指向托管变量的指针并在 statement 执行期间“钉住”该变量。如果没有 fixed 语句,则指向可移动托管变量的指针的作用很小,因为垃圾回收可能不可预知地重定位变量。C# 编译器只允许在 fixed 语句中分配指向托管变量的指针。
执行完语句中的代码后,任何固定变量都被解除固定并受垃圾回收的制约。因此,不要指向 fixed 语句之外的那些变量。
在不安全模式中,可以在堆栈上分配内存。堆栈不受垃圾回收的制约,因此不需要被锁定。有关更多信息,请参见 stackalloc。
// Unsafe method: takes a pointer to an int. unsafe static void SquarePtrParam (int* p) *p *= *p; unsafe static void Main() Point pt = new Point(); pt.x = 5; pt.y = 6; // Pin pt in place: fixed (int* p = pt.x) SquarePtrParam (p); // pt now unpinned Console.WriteLine ("{0} {1}", pt.x, pt.y);
指针的那些用法 什么是指针? 从根本上看,指针是一个值为内存地址的变量。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。 因为计算机或者嵌入式设备的硬件指令非常依赖地址,指针在某种程度上把程序员想要表达的指令以更接近机器的方式表达,因此,使用指针的程序更有效率。尤其是指针能够有效地处理数组,而数组表示法其实是在变相的使用指针,比如:数组名是数组首元素的地址。
C++:delete不完整类型的指针 以下代码编译时会有warning: class X; void foo(X* x) { delete x; 在GCC4.1.2下,编译出错信息是: warning: possible problem detected in invocation of delete oper.
// assume class Point { public int x, y; } // pt is a managed variable, subject to garbage collection. Point pt = new Point(); // Using fixed allows the address of pt members to be // taken, and "pins" pt so it isnt relocated. fixed ( int* p = pt.x ) *p = 1;
fixed (int* p = arr) ... // equivalent to p = arr[0] fixed (char* p = str) ... // equivalent to p = str[0]
执行完语句中的代码后,任何固定变量都被解除固定并受垃圾回收的制约。因此,不要指向 fixed 语句之外的那些变量。
在不安全模式中,可以在堆栈上分配内存。堆栈不受垃圾回收的制约,因此不需要被锁定。有关更多信息,请参见 stackalloc。
// Unsafe method: takes a pointer to an int. unsafe static void SquarePtrParam (int* p) *p *= *p; unsafe static void Main() Point pt = new Point(); pt.x = 5; pt.y = 6; // Pin pt in place: fixed (int* p = pt.x) SquarePtrParam (p); // pt now unpinned Console.WriteLine ("{0} {1}", pt.x, pt.y);
指针的那些用法 什么是指针? 从根本上看,指针是一个值为内存地址的变量。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。 因为计算机或者嵌入式设备的硬件指令非常依赖地址,指针在某种程度上把程序员想要表达的指令以更接近机器的方式表达,因此,使用指针的程序更有效率。尤其是指针能够有效地处理数组,而数组表示法其实是在变相的使用指针,比如:数组名是数组首元素的地址。
C++:delete不完整类型的指针 以下代码编译时会有warning: class X; void foo(X* x) { delete x; 在GCC4.1.2下,编译出错信息是: warning: possible problem detected in invocation of delete oper.
相关文章
- 《C#高级编程》学习笔记------C#中的委托和事件(续)
- C#中Uri类的解释
- 重学c#系列——缓存[盛派源码分析cache](九)
- 重新整理数据结构与算法(c#)——算法套路k克鲁斯算法[三十]
- C# 中LinkLabel的简单使用
- C# 指针学习笔记之fixed 语句
- C# 指针学习笔记之指针类型
- C# DataTable RowFilter 过滤
- 改善C#程序的157个建议——建议84学习笔记:使用PLINQ
- 改善C#程序的157个建议——建议33学习笔记:避免在泛型类型中声明静态成员
- JavaScript学习笔记之JavaScript调用C#编写的COM组件
- (三十六)c#Winform自定义控件-步骤控件-HZHControls
- 《OOC》笔记(4)——自动化地将C#代码转化为C代码(结构版)
- C#学习笔记(四)——变量的更多内容
- C#学习笔记(三)——流程控制
- C#.Net正则表达式学习笔记