2013-08-02 66 views
-1

究竟這意味着在C#中的數據類型*表示

數據類型*

:INT *,雙*,字符*,...

任何一個可以給它一些解釋請。

在此先感謝。

+2

這是C/C++,不C#的。這是一個指針:http://www.cs.cf.ac.uk/Dave/C/node10.html – GrandMasterFlush

+0

下面是在C#中的數據類型:http://msdn.microsoft.com/en-us/library/ms173104 (v = VS.80).ASPX – Max

+1

@GrandMasterFlush眼罩離:) – sehe

回答

1

這是一個不安全的指針。 Unsafe Code Tutorial

下面是使用它的一個例子:How to pull out alpha and count digits using regex?

private static unsafe List<long> ParseNumbers(char[] input) 
{ 
    var r = new List<long>(); 

    fixed (char* begin = input) 
    { 
     char* it = begin, end = begin + input.Length; 

     while (true) 
     { 
      while (it != end && (*it < '0' || *it > '9')) 
       ++it; 

      if (it == end) break; 

      long accum = 0; 
      while (it != end && *it >= '0' && *it <= '9') 
       accum = accum * 10 + (*(it++) - '0'); 

      r.Add(accum); 
     } 
    } 

    return r; 
} 
0

那些是Pointer types

在不安全的上下文中,類型可能是指針類型以及值類型或引用類型。指針類型聲明採用以下形式之一:

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

看一看Pointer types (C# Programming Guide)

在不安全上下文中,一個類型可以是指針類型,值類型,或 參考類型。指針類型聲明採用以下格式之一:

type * identifier;

void * identifier; //允許但不建議

0

它們被稱爲Pointer types

在不安全上下文中,一個類型可以是指針型以及一​​個 值類型或引用類型。但是,指針類型也可能是 ,用於不安全上下文之外的typeof表達式中,因爲此類用法並非不安全。

指針型被寫入作爲非託管型或關鍵字void, 後跟一個*標記:

在指針類型的*之前指定的類型被稱爲指針的 所指類型類型。它表示指針類型的值所指向的 變量的類型。

與引用(引用類型的值)不同,指針不是由垃圾收集器跟蹤的 - 垃圾收集器沒有指針和指向的數據的 知識。對於這個 原因,指針不允許指向包含引用的引用或 結構,並且指針 的引用類型必須是非託管類型。

0

這是指針在C#

請花時間閱讀本Unsafe Code Tutorial

using System; 

class Test 
{ 
    // The unsafe keyword allows pointers to be used within 
    // the following method: 
    static unsafe void Copy(byte[] src, int srcIndex, 
     byte[] dst, int dstIndex, int count) 
    { 
     if (src == null || srcIndex < 0 || 
      dst == null || dstIndex < 0 || count < 0) 
     { 
      throw new ArgumentException(); 
     } 
     int srcLen = src.Length; 
     int dstLen = dst.Length; 
     if (srcLen - srcIndex < count || 
      dstLen - dstIndex < count) 
     { 
      throw new ArgumentException(); 
     } 


      // The following fixed statement pins the location of 
      // the src and dst objects in memory so that they will 
      // not be moved by garbage collection.   
      fixed (byte* pSrc = src, pDst = dst) 
      { 
        byte* ps = pSrc; 
        byte* pd = pDst; 

      // Loop over the count in blocks of 4 bytes, copying an 
      // integer (4 bytes) at a time: 
      for (int n =0 ; n < count/4 ; n++) 
      { 
       *((int*)pd) = *((int*)ps); 
       pd += 4; 
       ps += 4; 
      } 

      // Complete the copy by moving any bytes that weren't 
      // moved in blocks of 4: 
      for (int n =0; n < count%4; n++) 
      { 
       *pd = *ps; 
       pd++; 
       ps++; 
      } 
      } 
    } 


    static void Main(string[] args) 
    { 
     byte[] a = new byte[100]; 
     byte[] b = new byte[100]; 
     for(int i=0; i<100; ++i) 
      a[i] = (byte)i; 
     Copy(a, 0, b, 0, 100); 
     Console.WriteLine("The first 10 elements are:"); 
     for(int i=0; i<10; ++i) 
      Console.Write(b[i] + " "); 
     Console.WriteLine("\n"); 
    } 
} 

和輸出

The first 10 elements are: 
0 1 2 3 4 5 6 7 8 9 

我的牙齒這會給你一個想法,以低調的指針在C#以及如何使用它

好運