C#的指针只能指向一个一维数组,有时候我们需要指向一个二维数组,这篇BLOG就是讲解这个问题的。
上代码:
public static void Main(string[] args)
{
Stopwatch ss = new Stopwatch();
ss.Start();
//定义一个指针数组
double*[] p = new double*[8];
IntPtr[] c = new IntPtr[8];
//定义一个指向p指针数组的指针
fixed (double** pg = p)
{
//这里等同于我们用交叉数组的:
//Int[][] a = New Int[8][10];
for (int i = 0; i < p.Length; i++)
{
//分配内存空间,并使用p指针数组里面的每个指针指向每一个分配的内存空间。
c[i] = Marshal.AllocHGlobal(sizeof(double) * 10);
*(pg + i) = (double*)c[i];
}
//指针赋值
//这里等同于我们用交叉数组的赋值
//Int[][] a = New Int[8][10];
//a[i][j]=i*j;
for (int i = 1; i <= p.Length; i++)
for (int j = 1; j <= 10; j++)
*((*(pg + (i - 1))) + (j - 1)) = i * j;
//输出指针
//这里等同于输出交叉数组
//Console.Write(a[i][j])
for (int i = 0; i < p.Length; i++)
{
for (int j = 0; j < 10; j++)
{
Console.Write(*((*(pg + i)) + j) + " ");
if (j == 10 - 1)
Console.WriteLine();
}
}
//回收分配的内存空间
for (int i = 0; i < p.Length; i++)
Marshal.FreeHGlobal(c[i]);
}
ss.Stop();
Console.WriteLine(ss.Elapsed.TotalMilliseconds);
这样,一个指向交叉数组的指针就完成了。
主要是分3步:
1、创建一个指针数组
2、指针数组的每一个指针指向一个一维的数组
3、创建一个指向该指针数组的指针
这就完成了。
不明白的可以看下列代码:
private static double[][] a2 = new double[][]
{
new double[]{ 0,1 },
new double[]{ 2,3 },
new double[]{ 4,5 },
new double[]{ 6,7 },
new double[]{ 8,9 },
new double[]{ 10,11 },
new double[]{ 12,13 },
new double[]{ 14,15 }
};
public static void Main(string[] args)
{
double*[] p = new double*[8];
fixed (double** pg = p)
{
for (int i = 0; i < a2.Length; i++)
{
fixed (double* ap1 = a2[i])
*(pg+i) = ap1;
}
Console.WriteLine(*((*(pg+1)) + 1));
}
}
再不明白的可以加Q:87648714
分享到:
相关推荐
### C#中结构数组的深度解析 #### 一、数组概览 在C#中,数组作为基础数据结构,提供了一种存储同类型元素的连续内存区域的方式。数组的索引从0开始,这一特性与许多其他编程语言相似。值得注意的是,C#中的数组...
C#实现控件数组的方法 C#控件数组是指在C#中实现控件数组的功能,类似于VB6.0中的控件数组。控件数组的主要优点是可以循环附值和响应同一个事件,从而大大简化了代码。 循环附值 实现控件数组的循环附值有两种...
从性能角度来看,一维数组通常提供最快的访问速度,因为它避免了额外的指针间接引用和复杂的索引计算。锯齿数组虽然提供了灵活性,但在创建和访问子数组时可能会引入更多的开销,尤其是在频繁操作大量数据时。多维...
在C#编程中,有时我们需要对数组中的元素进行随机排序,比如在实现洗牌算法或者创建随机测试数据时。本文将详细介绍如何使用C#实现数组元素的打乱顺序功能,涉及到了C#数组的遍历以及随机数的操作。 首先,我们创建...
C# 访问 C++ 动态分配的数组指针实例讲解 在本文中,我们将探讨如何在 C# 中访问 C++ 动态分配的数组指针。这种情形常见于项目中需要调用 C++ 算法库的情况,C++ 内部运算结果返回矩形坐标数组,且事先不知道数组...
C# 字符串数组 随机排序 方法 通过生成随机数,来对换改变任意数组变量值,此方法相对其它类型数组也通用
基于C#调用C++ Dll结构体数组指针的问题详解 C#调用C++ Dll文件是一件很麻烦的事情,首先面临的是数据类型转换的问题。相信经常做C#开发的都和我一样把学校的那点C++基础都忘光了吧(语言特性类)。网上有一大堆得...
本主题主要关注的是如何在C#和C# Web服务之间传递数组和二进制数据。这两种语言都广泛应用于开发Web服务,尤其是C#,它提供了强大的.NET Framework支持,使得构建Web服务变得更加便捷。 标题“C,C# webservice 返回...
C#的二维数组双线性插值算法。 用于二维数组的双线性插值算法,可分别设置长度和宽度。
在C#编程语言中,多维数组是一种非常重要的数据结构,它允许我们存储二维或更高维度的数据。在本教程中,我们将深入探讨如何创建、初始化和操作多维数组,以及如何实现它们的输入和输出。 首先,让我们了解什么是...
在C#编程语言中,将byte数组转换为8bit灰度图像是一项常见且重要的技能,尤其是在处理图像数据或开发图像处理应用时。本文将详细解析这一过程,包括关键概念、技术细节以及具体实现步骤。 ### 关键概念 1. **8bit...
c#Linq操作数组 c#Linq操作数组 c#Linq操作数组
发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把byte数组转换为结构体,...
C#实现结构体与数组间的转换,包括:同时支持大小端;支持自定义数据类型;支持数组类型结构体成员,带单元测试
根据给定的文件信息,我们将深入探讨如何在C#中实现两个整型数组元素的相加操作,并且会对相关的概念和技术细节进行详细说明。 ### C#中的数组与基本操作 在C#中,数组是一种非常基础的数据结构,用于存储固定大小...
在本篇文章中,我们将深入探讨如何在C#中将整型数组元素转换为字符串,并对提供的代码示例进行详细分析。 ### C#中将整型数组转换为字符串的方法 #### 背景介绍 在软件开发过程中,经常需要将不同类型的变量转换成...
### C#构造Json数组 在现代软件开发过程中,数据交换格式的选择至关重要,JSON(JavaScript Object Notation)作为轻量级的数据交换格式,在Web应用中得到了广泛的应用。在.NET框架下,利用C#语言处理JSON数据变得...
### C#中的数组与集合类详解 #### 一、数组的概念与使用 在C#编程中,数组是一种非常重要的数据结构,它允许程序员以一种高效且有序的方式存储多个相同类型的数据项。数组不仅可以帮助简化代码,提高代码的可读性...
在C#编程中,二维数组是一种常见的数据结构,用于存储多列或多行的数据。当处理这类数据时,可能需要对数组中的元素进行排序,以便于分析或展示。本篇文章将详细探讨如何在C#中实现对二维数组的排序,特别关注如何...
本篇文章将深入探讨如何在C#中读取包含数组的JSON文件。 首先,我们需要了解JSON的基本结构。一个JSON文件通常包含键值对,可以表示对象或者数组。数组在JSON中用方括号`[]`表示,对象用大括号`{}`表示。例如,一个...