在C#里创建和使用C风格数据结构
在C#里创建和使用C风格数据结构,即非托管的数据结构,可以提高性能。
1 数据结构的定义
看下面例子:
unsafe struct A {
public int x;
}
unsafe struct B {
public A a; //A内嵌到B中
public A* pa; //A链接到B中
public fixed int x[10]; //固定大小的数组内嵌到B中
public int* p; //大小未定的数组(首指针)链接到B中
}
所有数据结构,都用struct,不用class,而且struct每一个子元素都不能是class。
2 在非托管堆中创建对象或数组
看下面例子(静态类class C的源代码在后面给出):
A* pa=(A*)C.New(sizeof(A)); //相当于C里面的A* pa=(A*)malloc(sizeof(A));
B* pb=(B*)C.New(sizeof(B),5); //创建一个有5个元素的一维B数组
int** a1=(int**)C.New(sizeof(int), 2, 3); //创建一个2*3二维int数组,可用a1[i][j]访问每个元素
int** a2=(int**)C.New(new int[2,3]); //功能同上,并用0初始化数组
int** a3=(int**)C.New(new int[,]{{1, 2, 3},{4, 5, 6}}); //功能同上,并用指定值初始化数组
char* s=C.New("abcde"); //用字符串初始化char数组
C.Delete(pa, pb, a1, a2, a3, s); //释放上述对象的内存,参数个数任意
3 在栈中创建对象或数组
看下面例子:
A a; //建立栈对象a
B* pb=stackalloc B[5]; //创建一个有5个元素的一维栈数组
char* p1=stackalloc char[5];
C.Copy(p1, "Test"); //把字符串里的字符复制到栈数组里
C.Copy(p1, new[] { 'T', 'e', 's', 't', '\0' }); //把托管数组的数据复制到栈数组里
4 静态类class C的源代码
unsafe static class C {
[DllImport("msvcrt")]
public static extern void* malloc(uint size);
[DllImport("msvcrt")]
public static extern void* realloc(void* p, uint newsize);
[DllImpor
相关文档:
ASP.NET程序中常用的三十三种代码
1. 打开新的窗口并传送参数:
传送参数:
response.write("<script>window.open(’*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"’)</script>")
接收参数:
string a = Request.QueryString("id");
string& ......
一、建立网页
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<script language="javascript" type="text/javascript">
<!-- 提供给C#程序调用的方法 -->
function messageBox(message)
{
alert(message);
}
</script>
</head>
& ......
sd.xml文件:
<?xml version="1.0" encoding="gb2312"?>
<!--这是一个xml文件-->
<xml1>
<item name="1">第一个item</item>
<item name="2">
<item name="1">这个结点(1) ......
现在很多软件都是以xml文件作为数据源,而很多数据工具如pb等却只能另存为txt、excel等格式,为此需要一工具能将txt文本转换成xml文件。google了一下,没找到合适的,冲动之下用C#写了一个txt文本转xml格式文本的小程序,代码如下。
新建一个w ......
比如 输入1.9会显示1.899999 类似的问题
由于C语言中对于浮点小数的表达方式的局限导致的。C语言中10进制小数是直接用2进制小数来表示的。由于某些10进制小数根本无法用2进制小数来精确表达,譬如0.1,导致计算机不得不用近似的相差很小的2进制小数来表示这些10进制小数。
既然是近似,就一 ......