本篇內(nèi)容主要講解“如何使用c#結(jié)構(gòu)體”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何使用c#結(jié)構(gòu)體”吧!
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)開化,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
直接看c++和c#代碼:
struct structpointer { int id; int* ptrid; }; void processstructpointer(structpointer *sp) { if (sp == NULL) return; int* p; p = sp->ptrid; while (true) { if (*p != 0) //只要不是0就處理 { cout << *p << endl; *p += 1; p += 1; } else { break; } } }
unsafe public struct structpointer { public int id; public int* ptrid; }; [DllImport("ccalldll2.dll", EntryPoint = "processstructpointer", CallingConvention = CallingConvention.Cdecl)] public static extern unsafe void processstructpointer(structpointer *sp); private void button2_Click(object sender, EventArgs e) { structpointer[] sp = new structpointer[1]; int[] ids = new int[3]; ids[0] = 1; ids[1] = 5; ids[2] = 7; unsafe { ////int* p = &ids[0];//只能獲取 fixed 語句初始值設(shè)定項(xiàng)內(nèi)的未固定表達(dá)式的地址 //fixed(structpointer* p = &sp[0]) //{ // //p->ptrid = &ids[0];//只能獲取 fixed 語句初始值設(shè)定項(xiàng)內(nèi)的未固定表達(dá)式的地址 //} fixed(int *p = &ids[0]) { fixed(structpointer* pt = &sp[0]) { pt->ptrid = p; //注意這種寫法 processstructpointer(pt); processstructpointer(pt); } } } }
注意:連續(xù)兩次調(diào)用processtructpointer(pt)的現(xiàn)象:
1)當(dāng)用ids[0] = 1; ids[1] = 5; ids[2] = 0;則一切現(xiàn)象都正常OK;
2)當(dāng)用ids[0] = 1; ids[1] = 5; ids[2] = 7;則一切現(xiàn)象都不正確。
上面兩種現(xiàn)象都好理解,關(guān)鍵是結(jié)構(gòu)體,結(jié)構(gòu)體指針,結(jié)構(gòu)體成員是指針,結(jié)構(gòu)體指針作參數(shù)在c++和c#之間是如何處理的。其實(shí)還有IntPtr可以處理struct相關(guān)的參數(shù)。
補(bǔ)充說明:
以前一直實(shí)驗(yàn)都是c++和c#中的struct的名稱都是一樣的,今天將上面的structpointer改為structpointerxback,其它c(diǎn)#中代碼也對(duì)應(yīng)修改名稱,結(jié)果實(shí)驗(yàn)也是OK的。這說明:名稱只是形式而已,真正從內(nèi)存角度來說,c++處理的時(shí)候并不是以名稱來看的,還是從內(nèi)存物理結(jié)構(gòu)來看。
到此,相信大家對(duì)“如何使用c#結(jié)構(gòu)體”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!