本篇內容主要講解“如何使用c#結構體”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用c#結構體”吧!
成都創新互聯公司主要從事成都網站設計、成都網站制作、外貿網站建設、網頁設計、企業做網站、公司建網站等業務。立足成都服務開化,10多年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務: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 語句初始值設定項內的未固定表達式的地址 //fixed(structpointer* p = &sp[0]) //{ // //p->ptrid = &ids[0];//只能獲取 fixed 語句初始值設定項內的未固定表達式的地址 //} fixed(int *p = &ids[0]) { fixed(structpointer* pt = &sp[0]) { pt->ptrid = p; //注意這種寫法 processstructpointer(pt); processstructpointer(pt); } } } }
注意:連續兩次調用processtructpointer(pt)的現象:
1)當用ids[0] = 1; ids[1] = 5; ids[2] = 0;則一切現象都正常OK;
2)當用ids[0] = 1; ids[1] = 5; ids[2] = 7;則一切現象都不正確。
上面兩種現象都好理解,關鍵是結構體,結構體指針,結構體成員是指針,結構體指針作參數在c++和c#之間是如何處理的。其實還有IntPtr可以處理struct相關的參數。
補充說明:
以前一直實驗都是c++和c#中的struct的名稱都是一樣的,今天將上面的structpointer改為structpointerxback,其它c#中代碼也對應修改名稱,結果實驗也是OK的。這說明:名稱只是形式而已,真正從內存角度來說,c++處理的時候并不是以名稱來看的,還是從內存物理結構來看。
到此,相信大家對“如何使用c#結構體”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
網頁標題:如何使用c#結構體
URL網址:http://m.kartarina.com/article8/jedeip.html
成都網站建設公司_創新互聯,為您提供Google、小程序開發、微信小程序、營銷型網站建設、做網站、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯