簡體   English   中英

C#中結構的指針

[英]Pointers in structures in c#

我正在使用一個名為avl_node的結構,代碼如下:

unsafe struct avl_node
    {
        Studentdb data;
        avl_node *left;
        avl_node *right;
        int height;
    };

我想在名為avl_methods的類中創建一個功能Height 。請參見下面的代碼:

class avl_methods
{
    public unsafe int height(avl_node *a_node)
    {
        if(a_node==NULL)
        {
            return -1;
        }
        else
        {
            return a_node->height;
        }
    }
}

我現在遇到的錯誤是無法獲取地址,獲取其大小或聲明一個指向托管類型的指針。 盡管我在項目中允許使用不安全的代碼。 請幫我。 我真的想在結構中使用指針,因為這是我的項目的要求。 我正在使用WPF 4.0開發桌面應用程序...

希望能有更好的回應!

您正在使用

Studentdb
{
 int student_id;
 String Student_name;
 Date dob; char gender;
 String department;
};

字符串是.NET中的引用類型,對於結構指針是non-blittable的。

顯然, StudentdbString ans char導致了此問題。 要了解原因,您需要了解垃圾收集器的工作方式。 它通過跟蹤對對象的引用來發現垃圾。

因此,編譯器可以提前告知垃圾回收器將永遠無法看到字符串引用。

唯一的解決方法是嚴格限制自己使用值類型。 對字符串執行此操作的唯一方法是在unmanaged memory分配它們

參考: http : //msdn.microsoft.com/en-us/library/75dwhxf7.aspx

該問題必須與Studentdb結構有關。 我認為從您聲明avl_node的地方看不到它

此代碼段引發了您遇到的錯誤

    unsafe struct avl_node
    {
        Studentdb data;
        avl_node* left;
        avl_node* right;
        int height;
    };

    //unsafe struct Studentdb
    //{
    //    int height;
    //};

還行吧

    unsafe struct avl_node
    {
        Studentdb data;
        avl_node* left;
        avl_node* right;
        int height;
    };

    unsafe struct Studentdb
    {
        int height;
    };

您發布的代碼中的指針聲明沒有問題。

UPDATE

這是結構Studentdb的OP定義,當用戶首次發布時我還沒有定義

struct Studentdb
{
 int student_id;
 String Student_name;
 Date dob;
 char gender;
 String department;
};

您還可以將結構更改為以下形式:

    struct Studentdb
    {
        int student_id;
        char * []Student_name;
        char*[] dob;
        char gender;
        char*[] department;
    };

由於string是clr類型,不能與指針一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM