C# c语言结构中的指针#
我使用的结构名为avl_node,代码如下:C# c语言结构中的指针#,c#,.net,wpf,C#,.net,Wpf,我使用的结构名为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_n
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;
}
}
}
我现在遇到的错误是无法获取托管类型的地址、大小或声明指向托管类型的指针。尽管我允许在项目中使用不安全代码。请帮帮我。我真的很想在结构中使用指针,因为这是我的项目的要求。我正在开发一个桌面应用程序使用WPF4.0
希望得到更好的回应 问题一定与Studentdb结构有关。我认为从声明avl_节点的位置看不到它 此代码段引发了您得到的错误
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;
};
您发布的代码中指针的声明没有问题
更新
这是struct 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;
};
因为字符串是clr类型,不能与指针一起使用。您正在使用
Studentdb
{
int student_id;
String Student_name;
Date dob; char gender;
String department;
};
字符串是.NET中的引用类型,对于结构指针来说是不可blittable
显然,Studentdb
中的String
anschar
导致了这个问题。要了解原因,您需要了解垃圾收集器是如何工作的。它通过跟踪对对象的引用来发现垃圾
因此,编译器可以预先告知垃圾收集器将永远无法看到字符串引用
唯一的解决方法是严格限制自己的值类型。对字符串执行此操作的唯一方法是在非托管内存中分配它们
请参阅:问题可能是
Studentdb
?您能解释一下为什么需要这样做吗?很少需要c#中的指针/不安全代码,除非您正在做一些p/invoke工作(或性能关键代码),正如CharleH指出的,您想做什么?如果你刚刚得到高度,你不需要指针。如果你从C++到C(我已经完成了),它需要一些时间来远离指针和“信任”C。在您的示例中,您根本不需要指针。@ling.s struct Studentdb{int student_id;String student_name;Date dob;char gender;String department;};在C#中实现这种数据结构的两种标准方法是:1)对节点使用引用类型,并使用引用而不是指针来引用子节点。C++引用比C++引用更接近C++指针。他们只是不支持算术,但你不需要。2) 使用结构,将其放入数组,并在数组中使用索引而不是指针。avl_节点中的数据成员“data”具有数据类型“Studentdb”,这也是一种结构。。。我不会因此而出错。。。。该错误是由于avl\U nodeleft、avl\U noderight。。。。。。由于Studentdb,绝对没有错误…Studentdb结构的定义是从哪里得到的?我没有因此得到错误,错误是由指针引起的。。。如果我注释掉结构avl_节点,那么程序编译得非常完美!!!这是问题的唯一原因,请在没有Studentdb数据的情况下尝试;