• 在C#中使用指针


    在C#中使用指针

    C#语言是一种.Net语言,它的代码经过编译后产生的各种对象大多都是受.Net框架管理的托管代码。与C++不同的是它的内存管理是由.Net框架提供,而不像C++要自己管理。.Net框架使用垃圾收集器和引用来管理内存的使用。当一个对象不再被任何对象引用时,就可能被垃圾收集器清理掉,同时释放占用的内存。接着.Net框架会压缩托管堆以便在下次分配内存时有连续的内存块可供分配。这样一种处理方式是有效和安全的。

    但某些时候为了一些特殊的目的,我们也许还是需要直接对内存访问。例如:性能方面的问题,或要访问非托管代码编写的DLL,需要把一个指针当作参数来传递。这些时候就需要使用到指针,就像C++中的指针一样。

    实际上C#中的引用就是一个指针,它的内容就是它所引用对象的地址。只不过在没有特殊声明的情况下,C#的引用属于.Net托管的安全的指针。而且C#的引用语法不允许直接访问引用所包含的变量地址,这样就失去了C++中直接对指针操作的灵活性和技巧。C#的引用主要提供了易用和安全的方式访问内存,能够防止用户无意中执行某些破坏内存内容的操作。但如果确实需要使用指针直接访问内存,那么这段代码将被视作不安全代码,需要特别标注。标注不安全代码的语法如下:

    unsafe int functionName() {...}             // 把函数标记为不安全代码
    unsafe class className {...}                // 把类标记为不安全代码
    class className{  unsafe int * pX;     }    // 把类的成员标记为不安全代码

    但是不能把局部变量标记为不安全代码,例如:

    int functionName() {  unsafe int * pX; }    // 这是错误的声明

    如果要使用不安全的局部变量,就需要在方法或不安全的语句块中声明和使用它。在使用指针前,还需要告诉编译器有不安全代码块。可以使用如下命令来编译含有不安全代码的源文件:

    csc /unsafe MyCode.cs



    使用指针

    要使用指针,首先是声明指针变量,语法如下:

    int * pA,pB;
    int*[] pList;

    这里注意与C++的不同之处,int * pA,pB  这段代码在C++中声明了一个整形指针和一个整形变量,如果要同时声明两个整形指针应该是这样写 int *pA, *pB ,但C#中“*”是与类型相关,而不是与变量相关,所以 int * pA,pB 就同时声明了两个指针变量。

    另外同C++一样“&”表示获取变量的地址,“*”表示获取指针所指变量的内容。如下:

    int x = 10;              // 声明一个变量
    int * pX,pY;          // 声明两个指针
    pX = &x;              // 取出变量x的地址放到指针pX中
    pY = pX;              // 将一个指针的内容复制给另一个指针
    *pY = 20;             // 将变量x的内容改为20

    未完待续......

  • 相关阅读:
    38.进程及同步异步的概念理解
    37.图灵接口及电脑语音聊天
    36.HTTP协议
    35.百度云语音识别接口使用及PyAudio语音识别模块安装
    34.TCP非阻塞连接及套接字异常处理丶端口扫描脚本
    33.TCP协议概念/scapy模块doos攻击
    32.网络编程TCP/UDP服务
    python递归函数实现阶乘函数
    用户不在sudoers文件中怎么办,ziheng is not in the sudoers file解决方法
    SecureCRT连接阿里云ECS服务器,经常掉线的解决方案
  • 原文地址:https://www.cnblogs.com/eric1394/p/520457.html
Copyright © 2020-2023  润新知