`
djking
  • 浏览: 8779 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

c# 指向交叉数组的指针

阅读更多
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#中结构数组的深度解析 #### 一、数组概览 在C#中,数组作为基础数据结构,提供了一种存储同类型元素的连续内存区域的方式。数组的索引从0开始,这一特性与许多其他编程语言相似。值得注意的是,C#中的数组...

    C#实现控件数组的方法

    C#实现控件数组的方法 C#控件数组是指在C#中实现控件数组的功能,类似于VB6.0中的控件数组。控件数组的主要优点是可以循环附值和响应同一个事件,从而大大简化了代码。 循环附值 实现控件数组的循环附值有两种...

    C#中各种数组的性能比较

    从性能角度来看,一维数组通常提供最快的访问速度,因为它避免了额外的指针间接引用和复杂的索引计算。锯齿数组虽然提供了灵活性,但在创建和访问子数组时可能会引入更多的开销,尤其是在频繁操作大量数据时。多维...

    C#实现将数组内元素打乱顺序的方法

    在C#编程中,有时我们需要对数组中的元素进行随机排序,比如在实现洗牌算法或者创建随机测试数据时。本文将详细介绍如何使用C#实现数组元素的打乱顺序功能,涉及到了C#数组的遍历以及随机数的操作。 首先,我们创建...

    C#访问C++动态分配的数组指针(实例讲解)

    C# 访问 C++ 动态分配的数组指针实例讲解 在本文中,我们将探讨如何在 C# 中访问 C++ 动态分配的数组指针。这种情形常见于项目中需要调用 C++ 算法库的情况,C++ 内部运算结果返回矩形坐标数组,且事先不知道数组...

    C# 字符串数组随机排序 简单方法

    C# 字符串数组 随机排序 方法 通过生成随机数,来对换改变任意数组变量值,此方法相对其它类型数组也通用

    基于C#调用c++Dll结构体数组指针的问题详解

    基于C#调用C++ Dll结构体数组指针的问题详解 C#调用C++ Dll文件是一件很麻烦的事情,首先面临的是数据类型转换的问题。相信经常做C#开发的都和我一样把学校的那点C++基础都忘光了吧(语言特性类)。网上有一大堆得...

    C,C#webservice 返回数组,二进制

    本主题主要关注的是如何在C#和C# Web服务之间传递数组和二进制数据。这两种语言都广泛应用于开发Web服务,尤其是C#,它提供了强大的.NET Framework支持,使得构建Web服务变得更加便捷。 标题“C,C# webservice 返回...

    C#二维数组双线性插值算法

    C#的二维数组双线性插值算法。 用于二维数组的双线性插值算法,可分别设置长度和宽度。

    对C#中多维数组,进行学习.实现多维数组的输入和输出

    在C#编程语言中,多维数组是一种非常重要的数据结构,它允许我们存储二维或更高维度的数据。在本教程中,我们将深入探讨如何创建、初始化和操作多维数组,以及如何实现它们的输入和输出。 首先,让我们了解什么是...

    C#中将byte数组转换为8bit灰度图像

    在C#编程语言中,将byte数组转换为8bit灰度图像是一项常见且重要的技能,尤其是在处理图像数据或开发图像处理应用时。本文将详细解析这一过程,包括关键概念、技术细节以及具体实现步骤。 ### 关键概念 1. **8bit...

    c#Linq操作数组

    c#Linq操作数组 c#Linq操作数组 c#Linq操作数组

    C#中byte数组和c++结构体的转换

    发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把byte数组转换为结构体,...

    C# 结构体与数组转换,结构体成员支持数组类型

    C#实现结构体与数组间的转换,包括:同时支持大小端;支持自定义数据类型;支持数组类型结构体成员,带单元测试

    C# 将两个整型数组的元素相加

    根据给定的文件信息,我们将深入探讨如何在C#中实现两个整型数组元素的相加操作,并且会对相关的概念和技术细节进行详细说明。 ### C#中的数组与基本操作 在C#中,数组是一种非常基础的数据结构,用于存储固定大小...

    C# 将整型数组元素转换为字符串

    在本篇文章中,我们将深入探讨如何在C#中将整型数组元素转换为字符串,并对提供的代码示例进行详细分析。 ### C#中将整型数组转换为字符串的方法 #### 背景介绍 在软件开发过程中,经常需要将不同类型的变量转换成...

    C#构造Json数组

    ### C#构造Json数组 在现代软件开发过程中,数据交换格式的选择至关重要,JSON(JavaScript Object Notation)作为轻量级的数据交换格式,在Web应用中得到了广泛的应用。在.NET框架下,利用C#语言处理JSON数据变得...

    C#中的数组与集合类,vusual studio 2008教程

    ### C#中的数组与集合类详解 #### 一、数组的概念与使用 在C#编程中,数组是一种非常重要的数据结构,它允许程序员以一种高效且有序的方式存储多个相同类型的数据项。数组不仅可以帮助简化代码,提高代码的可读性...

    C#实现对二维数组排序的方法

    在C#编程中,二维数组是一种常见的数据结构,用于存储多列或多行的数据。当处理这类数据时,可能需要对数组中的元素进行排序,以便于分析或展示。本篇文章将详细探讨如何在C#中实现对二维数组的排序,特别关注如何...

    C# 读取数组Json文件

    本篇文章将深入探讨如何在C#中读取包含数组的JSON文件。 首先,我们需要了解JSON的基本结构。一个JSON文件通常包含键值对,可以表示对象或者数组。数组在JSON中用方括号`[]`表示,对象用大括号`{}`表示。例如,一个...

Global site tag (gtag.js) - Google Analytics