c++(5)

最近碰到一个c++创建动态二维数组的问题。上网查了查资料,现在吧有关内容做一个小结。 
关于二维数组,有几个容易混淆的概念。

int ** arr0;
int *arr1[];
int (*arr2)[];
int arr3[][];
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

int * *arr0 是一个二级指针,就是指针的指针。int *arr1[]是一个指针数组,就是说,它首先是一个数组 ,而数组中的元素都是 int 型的指针。int (*arr2)[] 是一个数组指针, 它首先是一个指针, 不过该指针指向的是一个数组,这点可以类比于函数指针。 int arr3[][]是一个二维数组, 实际上是数组的数组,它有外层数组,二外层数组里的每一个元素都是(内层的)数组。实际上,二维数组int arr3[][]与 数组指针 int (*arr2)[]可以对应起来,假如函数形参是int arr3[][] ,实参为 int(*arr2)[]的话是可以调用成功的,这就像有一个这样的函数签名:void print(int arr[] ,int size) 你这样

int a[]={1,2,3};
int *p =a;
print(p ,3); 
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

是没有问题的。 
下面说说如何创建动态二维数组,在c++中使用一对运算符 new 和delete来处理动态数组的创建。我在这里按照使用new的次数分为两种方法。 
1.使用一次new运算符:


    int size =3;

    float  (*arr)[2]= new float[size][2]; //二维数组分配内存

    for(int i=0;i<size;++i)  //对二维数组的初始化操作
    {
        for(int j =0;j<2;++j)
        {
            arr[i][j] = 0;
        }
    }


    delete[] arr; //销毁内存
    arr=NULL;
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里定义了一个3x2 的二维数组 ,要注意如果用这种方式有个限制,即二维数组的列数必须指定,否则编译会报错。 
2.使用两次new运算符:

    int xsize = 4,ysize =5;
    int **arr = new int*[xsize]; //为二维数组分配内存(外层)
    int i,j;
    for(i =0;i<xsize;++i)
    {
        arr[i]= new int[ysize];  //为二维数组分配内存(内层)
    }

    for(i=0;i<xsize;++i)     //初始化
    {
        for(j=0;j<ysize;++j)
        {
            arr[i][j]=0;
        }
    }

    for(i =0;i<xsize;++i)  //销毁内存
    {
        delete[] arr[i];
        arr[i]=NULL:
    }

    delete[] arr;
    arr=NULL:
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

上面定义了一个4x5 的二维数组。可以看到,在分配内存时时使用了两次new,那么在销毁内存时也要使用两次delete。 
可以看到两种方法操作二维数组元素的方式是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旋转变压器---数字转换器作为现代伺服系统中被广泛使用的角位置测量系统,大量应用于高精度及大中型数控系统、机器人控制、工业控制、武器火力控制及惯性导航领域中。 传统的角测量系统面临的问题有:体积、重量、功耗偏大,调试、误差补偿试验复杂,费用较高。本文从微型化、智能化的方向进行研究,是解决传统角测量系统所面临问题的好途径。 本文所研究的旋转变压器---数字转换器是由信号调理模块、系统芯片C8051F064和输出控制模块组成的。整个系统的三路输入信号为X=AsinOcosar、Y=Acosθcos ot和Z=Ucosar(基准信号),输出信号为偏转角θ,输出形式为16 位数字量。信号调理模块是由模拟电路组成的,包括信号输入电路、相敏整流电路、滤波电路和直流稳压电源电路,其难点在于相敏整流电路的设计。信号调理模块的主要功能是把输入的交流信号X=AsinOcosor、Y=Acosθcosot转变成直流信号Bsinθ和Bcosθ,并使输出的直流信号在0~2.4V之间;系统芯片C8051F064是CYGNAL公司近年来推出的一款功能齐全的完全集成的混合信号片上系统型单片机。在本文所设计的系统中,系统芯片的输入信号为直流信号Bsinθ和Bcosθ,通过片内自带的2个16位A/D转换器对输入信号的数据进行采样和转换,并对转换完的数据进行滤波处理,以减小由于外界干扰而产生的误差,再用除法和反正切函数解算出偏转角θ的16位数字量;输出控制模块主要完成的功能是通过UARTO向计算机实时发送由单片机计算出来的偏转角度0的16位数字量,而串口的RS-232电平与单片机系统采用的是TTL电平之间的转换所采用的转换芯片是MC1488和MC1489。
Unreal Engine 5是一款用于游戏开发的引擎,支持C++编程语言。以下是关于Unreal Engine 5 C++的一些介绍和演示: 1. Unreal Engine 5 C++的基础知识包括相机工作、玩家控制、HUD、交互、多人游戏和AI等方面。如果您想学习Unreal Engine 5 C++,可以从这些基础知识开始。 2. Unreal Engine 5 C++的编程语言是C++,因此您需要具备一定的C++编程知识。如果您不熟悉C++,可以先学习C++编程语言。 3. Unreal Engine 5 C++支持使用Visual Studio进行编程。您可以使用Visual Studio创建和编辑C++代码,并将其与Unreal Engine 5集成。 4. Unreal Engine 5 C++还支持使用蓝图进行编程。蓝图是一种视觉编程语言,可以帮助您快速创建游戏逻辑和交互。 5. Unreal Engine 5 C++还支持使用虚幻命令行工具进行编程。这些工具可以帮助您快速创建和编辑代码,并将其与Unreal Engine 5集成。 以下是一个使用Unreal Engine 5 C++创建的简单示例: ```c++ #include "MyActor.h" #include "Components/StaticMeshComponent.h" AMyActor::AMyActor() { // 创建一个静态网格组件 UStaticMeshComponent* StaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent")); // 设置网格 static ConstructorHelpers::FObjectFinder<UStaticMesh> StaticMesh(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube")); if (StaticMesh.Succeeded()) { StaticMeshComponent->SetStaticMesh(StaticMesh.Object); } // 将网格组件附加到Actor上 RootComponent = StaticMeshComponent; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值