日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C#中指针使用总结

發(fā)布時間:2023/12/13 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 C#中指针使用总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C#為了類型安全,默認(rèn)并不支持指針。但是也并不是說C#不支持指針,我們可以使用unsafe關(guān)鍵詞,開啟不安全代碼(unsafe code)開發(fā)模式。在不安全模式下,我們可以直接操作內(nèi)存,這樣就可以使用指針了。在不安全模式下,CLR并不檢測unsafe代碼的安全,而是直接執(zhí)行代碼。unsafe代碼的安全需要開發(fā)人員自行檢測。

一、Vs2010中開啟unsafe code 的方式

在方法、類、代碼塊中使用unsafe關(guān)鍵詞,如:
unsafe static void Main(string[] args){ //代碼}

unsafe
{
//代碼塊
}
然后再項目上點擊鼠標(biāo)右鍵,選擇“屬性”,在“生成”選項卡中選中“允許不安全代碼”

二、C#可以定義為指針的類型有

sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool,
struct(結(jié)構(gòu)體),結(jié)構(gòu)體中只能包括非托管類型。

三、C#指針操作符

操作符 說明
* 取值運算符

& 取址運算符
-> 通過指針處理結(jié)構(gòu)體中的數(shù)據(jù)(獲取或賦值)
++與– 指針增、減操作
fixed 用戶暫時固定托管代碼中引用類型的位置。
Stackallc 分配內(nèi)存

例如分配內(nèi)存

char* cptr = stackalloc char[26];
for (int i = 0; i < 26;i++ )
{
    cptr[i] = (char) (i+65);
}
for (int i = 0; i < 26;i++ )
{
    Console.WriteLine(string.Format("{0}:{1}",(int)&cptr[i],cptr[i]));
}

至于釋放內(nèi)存,我在msdn上搜索了一下,c#并沒有提供釋放內(nèi)存的函數(shù)。而msdn給的解釋是:分配的內(nèi)存會在方法結(jié)束后自動釋放。
fixed的應(yīng)用會在下面的類與指針中做說明。

四、C#指針的定義

定義指針 說明
int* p 整形指針
int** p 指向整形指針的指針
char* c 指向字符的指針
int*[] arr 整形一維數(shù)組指針

五、指針的使用

1.整形指針的使用

int i=10;
int* iptr = &i;    //將i的地址賦值給iptr
Console.WriteLine((int)&iptr);  //取iptr得地址
Console.WriteLine(*iptr);     //取iptr指向的值

2.結(jié)構(gòu)體指針

struct Location
{
    public int X;
    public int Y;
}
unsafe static void Main(string[] args)
{
    Location location;
    location.X = 10;
    location.Y = 5;
    Location* lptr = &location;
    Console.WriteLine(string.Format("location 地址{0},lptr地址{1},lptr值{2}",(int)&location,(int)lptr,*lptr));
    Console.WriteLine(string.Format("location.x的地址{0},location.x的值{1}",(int)&(lptr->X),lptr->X));
    Console.WriteLine(string.Format("location.y的地址{0},location.y的值{1}", (int)&(lptr->Y), lptr->Y));
 }

以上代碼輸出結(jié)構(gòu)體的地址和值。我們在操作地址時,可以直接看到結(jié)構(gòu)體的內(nèi)存分配。

3.指針與參數(shù)

public static unsafe int* Add(int* x,int* y)
{
    int sum = *x + *y;
    return &sum;
}

int i = 2, j = 3;
Console.WriteLine(*Add(&i,&j));

4.類與指針,因為類是托管類型,我們知道類受到“垃圾收集”的影響,它的內(nèi)存地址是不固定的。而且類是引用類型,是不能聲明為指針類型的。而指針分配內(nèi)存后,不受“垃圾收集”影響,地址是固定的。所以為了使用類中的數(shù)據(jù),我們需要臨時固定類的地址。這就用到fixed關(guān)鍵詞,用fixed后,就可以操作類中的值類型了。

class People
{
    public int Age;   //值類型,不可以是屬性
    public void ShowAge()
    {
        Console.WriteLine(Age);
    }
}


People people = new People();
people.Age = 10;
fixed(int* agePtr=&people.Age)
{
    *agePtr += 1;
}
people.ShowAge();  //11

通過以上的方法,我們可以操作值類型,也可以獲得值類型的地址。但如何獲取類的內(nèi)存地址?我們可以使用GCHandle,來自System.Runtime.InteropServices命名空間。GCHandle提供從非托管內(nèi)存訪問托管對象的方法。如下:

object p = new People();
GCHandle h = GCHandle.Alloc(p, GCHandleType.Pinned);
IntPtr addr = h.AddrOfPinnedObject(); 
Console.WriteLine(addr.ToString());
h.Free();

六、C#中使用指針的總結(jié)

1.引用類型不能定義為指針
2.msdn上說enum可以定義為指針,可是我真不知道它的用處是什么。所以在指針的類型中并沒有出現(xiàn)enum類型。
3.c#中的指針操作遠(yuǎn)遠(yuǎn)不如c/c++,如果想學(xué)習(xí)指針的話,還是用c/c++
4.微軟并不推薦使用unsafe code模式,也不推薦使用指針。在msdn官方文檔中,唯一一句贊美C#指針的話就是“合理的使用指針,可以提高程序的執(zhí)行速度”。但是什么是“合理的使用”?我下載了msdn上的幾個關(guān)于C#指針的實例代碼,發(fā)現(xiàn)用的最多的是調(diào)用api函數(shù),在api函數(shù)中,有大量的指針參數(shù)。
5.fixed的使用可能產(chǎn)生存儲碎片,因為它們不能移動。如果確實需要固定對象,固定對象的時間應(yīng)該越短越好。
6.可以使我們了解非托管類型的內(nèi)存分配。

總結(jié)

以上是生活随笔為你收集整理的C#中指针使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色偷偷视频| 国产美女白浆 | 国产按摩一区二区三区 | 亚洲视屏一区 | 天堂网男人 | 亚洲黄色第一页 | 性色国产成人久久久精品 | 久久久久二区 | 四季av中文字幕 | 波多野结衣乳巨码无在线观看 | www精品一区二区三区 | 国产56页 | 天天操夜夜操狠狠操 | 精品少妇爆乳无码av无码专区 | 深爱激情综合 | 黄色福利 | kk视频在线观看 | 国产一级淫片a | 五月婷婷激情网 | 精品久久久久久 | 成人性视频网 | 国产在线免费视频 | 色吊丝一区二区 | 国产视频一二 | 成人一区电影 | 丰满人妻老熟妇伦人精品 | 女同久久另类69精品国产 | 亚洲人成7777| 久久三级精品 | 巨乳在线播放 | 反差在线观看免费版全集完整版 | 国产精品久久久久久久久久久久久久 | 国产孕妇孕交大片孕 | 91亚洲一区二区三区 | 成 人片 黄 色 大 片 | 涩涩视频在线观看免费 | 在线成人免费视频 | 搞黄网站在线观看 | 国产一区二区三区91 | 国产精品搬运 | 无码久久精品国产亚洲av影片 | 五月婷婷激情四射 | 亚洲精品激情 | 韩国av电影在线观看 | 91超碰在线免费观看 | 亚洲一二三区在线 | 在线一区av | 亚洲四虎影院 | 日韩欧美在线一区二区 | 三级理伦| 韩国三级在线播放 | 亚洲综合激情在线 | 粗大黑人巨茎大战欧美成人 | 亚洲精品无码永久在线观看 | 欧美黄色免费视频 | 五月婷婷俺也去 | 一区二区成人精品 | 日韩一区二区影视 | av一区二区在线播放 | 奇米网狠狠干 | 黄色福利视频网站 | 91美女高潮出水 | 亚洲一区二区黄片 | aaaaav| 三级五月天 | 精品福利三区3d卡通动漫 | 女人张开腿让男人桶爽 | 亚洲精品免费在线观看 | 2一3sex性hd | 自拍偷拍福利 | 免费a视频在线观看 | av影库 | 中文字幕免 | 欧美福利视频一区 | 天天操天天爽天天射 | 超碰在线 | 女的被男的操 | 小柔的淫辱日记(1~7) | 毛片88| 欧美国产日韩在线观看 | 91久久精品日日躁夜夜躁欧美 | 精品无码久久久久久久久果冻 | 蜜臀麻豆 | 放荡闺蜜高h苏桃情事h | 日韩www视频 | www.天天射| 中文字幕在线观看视频免费 | 婷婷亚洲精品 | 91黄色小视频 | 99爱在线| 国产日韩欧美成人 | 大胸美女啪啪 | 天天综合国产 | 成人做爰69片免费观看 | 国产精品人人妻人人爽 | 国产精品一线天粉嫩av | 在线观看国产一级片 | 国产天堂 | 伊人国产视频 |