<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 指針類型(C# 編程指南) 在不安全的上下文中,類型可以是指針類型、值類型或引用類型。指針類型聲明采用下列形式之一: ``` type* identifier; void* identifier; //allowed but not recommended ``` 以下任一類型均可為指針類型: * [sbyte](https://msdn.microsoft.com/zh-CN/library/d86he86x.aspx)、[byte](https://msdn.microsoft.com/zh-CN/library/5bdb6693.aspx)、[short](https://msdn.microsoft.com/zh-CN/library/ybs77ex4.aspx)、[ushort](https://msdn.microsoft.com/zh-CN/library/cbf1574z.aspx)、[int](https://msdn.microsoft.com/zh-CN/library/5kzh1b5w.aspx)、[uint](https://msdn.microsoft.com/zh-CN/library/x0sksh43.aspx)、[long](https://msdn.microsoft.com/zh-CN/library/ctetwysk.aspx)、[ulong](https://msdn.microsoft.com/zh-CN/library/t98873t4.aspx)、[char](https://msdn.microsoft.com/zh-CN/library/x9h8tsay.aspx)、[float](https://msdn.microsoft.com/zh-CN/library/b1e65aza.aspx)、[double](https://msdn.microsoft.com/zh-CN/library/678hzkk9.aspx)、[decimal](https://msdn.microsoft.com/zh-CN/library/364x0z75.aspx) 或 [bool](https://msdn.microsoft.com/zh-CN/library/c8f5xwh7.aspx)。 * 任何[枚舉](https://msdn.microsoft.com/zh-CN/library/sbbt4032.aspx)類型。 * 任何指針類型。 * 任何僅包含非托管類型字段的用戶定義的結構類型。 指針類型不從 [object](https://msdn.microsoft.com/zh-CN/library/9kkx3h3c.aspx) 繼承,并且指針類型與 **object** 之間不存在轉換。此外,裝箱和取消裝箱不支持指針。但是,你可在不同的指針類型之間以及指針類型和整型之間進行轉換。 在同一個聲明中聲明多個指針時,星號 (*) 僅與基礎類型一起寫入;而不是用作每個指針名稱的前綴。例如: ``` int* p1, p2, p3; // Ok int *p1, *p2, *p3; // Invalid in C# ``` 指針不能指向引用或包含引用的 [struct](https://msdn.microsoft.com/zh-CN/library/ah19swz4.aspx),因為無法對對象引用進行垃圾回收,即使有指針指向它也是如此。垃圾回收器并不跟蹤是否有任何類型的指針指向對象。 myType* 類型的指針變量的值為 myType 類型的變量的地址。下面是指針類型聲明的示例: | 示例 | 說明 | | --- | --- | | int* p | p 是指向整數的指針。 | | int** p | p 是指向整數的指針的指針。 | | int*[] p | p 是指向整數的指針的一維數組。 | | char* p | p 是指向字符的指針。 | | void* p | p 是指向未知類型的指針。 | 指針間接尋址運算符 * 可用于訪問位于指針變量所指向的位置的內容。例如,請考慮以下聲明: ``` int* myVariable; ``` 表達式 *myVariable 表示在 myVariable 中包含的地址處找到的 **int** 變量。 主題[fixed 語句(C# 參考)](https://msdn.microsoft.com/zh-CN/library/f58wzh21.aspx)和[指針轉換(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/etb4xxec.aspx)包含了多個指針示例。下面的示例顯示需要 **unsafe** 關鍵字和 **fixed** 語句以及如何遞增內部指針。你可將此代碼粘貼到控制臺應用程序的 Main 函數中來運行它。(記住在**“項目設計器”**中啟用不安全代碼;選擇菜單欄上的**“項目”**、**“屬性”**,然后選擇**“生成”**選項卡中的**“允許不安全代碼”**。) ``` // Normal pointer to an object. int[] a = new int[5] {10, 20, 30, 40, 50}; // Must be in unsafe code to use interior pointers. unsafe { // Must pin object on heap so that it doesn't move while using interior pointers. fixed (int* p = &a[0]) { // p is pinned as well as object, so create another pointer to show incrementing it. int* p2 = p; Console.WriteLine(*p2); // Incrementing p2 bumps the pointer by four bytes due to its type ... p2 += 1; Console.WriteLine(*p2); p2 += 1; Console.WriteLine(*p2); Console.WriteLine("--------"); Console.WriteLine(*p); // Deferencing p and incrementing changes the value of a[0] ... *p += 1; Console.WriteLine(*p); *p += 1; Console.WriteLine(*p); } } Console.WriteLine("--------"); Console.WriteLine(a[0]); Console.ReadLine(); // Output: //10 //20 //30 //-------- //10 //11 //12 //-------- //12 ``` 你無法對 void* 類型的指針應用間接尋址運算符。但是,你可以使用強制轉換將 void 指針轉換為任何其他指針類型,反之亦然。 指針可以為 **null**。將間接尋址運算符應用于 null 指針將導致由實現定義的行為。 請注意,在方法之間傳遞指針會導致未定義的行為。示例通過 Out 或 Ref 參數或作為函數結果返回一個指向局部變量的指針。如果已在固定塊中設置指針,則它指向的變量不再是固定的。 下表列出了可在不安全的上下文中對指針執行的運算符和語句: | 運算符/語句 |用法 | | --- | --- | | * | 執行指針間接尋址。 | | -&gt; | 通過指針訪問結構的成員。 | | [] | 為指針建立索引。 | | & | 獲取變量的地址。 | | ++ 和 -- | 遞增和遞減指針。 | | + 和 - | 執行指針算法。 | | ==、!=、&lt;、&gt;、&lt;= 和 &gt;= | 比較指針。 | | **stackalloc** | 在堆棧上分配內存。 | | **fixed** 語句 | 臨時固定變量以便找到其地址。 | ## C# 語言規范 有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。 ## 請參閱 [C# 編程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [不安全代碼和指針(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/t2yzs44b.aspx) [指針轉換(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/etb4xxec.aspx) [指針表達式(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/cdfedc40.aspx) [類型(C# 參考)](https://msdn.microsoft.com/zh-CN/library/3ewxz6et.aspx) [unsafe(C# 參考)](https://msdn.microsoft.com/zh-CN/library/chfa2zb8.aspx) [fixed 語句(C# 參考)](https://msdn.microsoft.com/zh-CN/library/f58wzh21.aspx) [stackalloc(C# 參考)](https://msdn.microsoft.com/zh-CN/library/cx9s2sy4.aspx) [裝箱和取消裝箱(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/yz2be5wk.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看