zoukankan      html  css  js  c++  java
  • C#基础指针类型

    在C#的不安全的代码书写中,类型可以是指针类型、值类型或引用类型。 指针类型声明具有下列形式之一:

     
    type* identifier;
    void* identifier; //allowed but not recommended
    

    下列类型都可以是指针类型:

    指针类型不继承 object,并且指针类型与 object 之间不存在转换。 此外,装箱和取消装箱不支持指针。

    但是,允许在不同指针类型之间以及指针类型与整型之间进行转换。

    当在同一个声明中声明多个指针时,* 仅与基础类型一起使用,而不是作为每个指针名称的前缀。 例如:

     
    int* p1, p2, p3;   // Ok
    int *p1, *p2, *p3;   // Invalid in C#
    

    指针不能指向引用或包含引用的struct,因为即使有指针指向对象引用,该对象引用也无法执行垃圾回收。 GC 并不注意是否有任何类型的指针指向对象。

    myType* 类型的指针变量的值是 myType 类型的变量的地址。 下面是指针类型声明的示例:

    示例

    说明

    int* p

    p 是指向整数的指针

    int** p

    p 是指向整数的指针的指针

    int*[] p

    p 是指向整数的指针的一维数组

    char* p

    p 是指向字符的指针

    void* p

    p 是指向未知类型的指针

    指针间接寻址运算符 * 可用于访问位于指针变量所指向的位置的内容。 例如,请考虑下面的声明:

     
     
    int* myVariable;
    

    表达式 *myVariable 表示在 myVariable 中包含的地址处找到的 int 变量。

    不能对 void* 类型的指针应用间接寻址运算符。 但是,可以使用强制转换将 void 指针转换为其他指针类型,反之亦然。

    指针可以为 null。 如果将间接寻址运算符应用于 null 指针,则会导致由实现定义的行为。

    注意,在方法之间传递指针会导致未定义的行为。 示例通过 Out 或 Ref 参数或作为函数结果返回一个指向局部变量的指针。 如果将指针设置在固定的块中,它所指向的变量可能不再是固定的

    下表列出可在不安全的上下文中针对指针执行的运算符和语句:

    运算符/语句

    使用

    *

    执行指针间接寻址。

    ->

    通过指针访问结构的成员。

    []

    为指针建立索引。

    &

    获取变量的地址。

    ++ 和 --

    递增和递减指针。

    加、减

    执行指针算法。

    ==、!=、<、>、<= 和 >=

    比较指针。

    stackalloc

    在堆栈上分配内存。

    fixed 语句

    临时固定变量以便可以找到其地址。

     
    From:https://msdn.microsoft.com/zh-cn/library/y31yhkeb%28v=vs.110%29.aspx
  • 相关阅读:
    怎样检测数据类型
    怎样理解函数参数的传递
    怎样在微信H5中点击直接跳转到公众号
    怎样启动和关闭nginx服务器
    怎样测试nginx.conf配置文件的正确性
    怎样查找/搜索文件
    怎样创建用户组并添加用户进用户组
    怎样查看Nginx版本号
    怎样写一个Hello World!
    怎样理解基本类型(原始类型)的数据和引用类型的数据
  • 原文地址:https://www.cnblogs.com/2Yous/p/4887918.html
Copyright © 2011-2022 走看看