微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将二维矩阵分配给 C++/Arduino 中的另一个变量

如何解决将二维矩阵分配给 C++/Arduino 中的另一个变量

我有一个数组或矩阵,如 first[][4] = {{7,255,0},{6,0}} 和另一个变量。如何将二维矩阵分配给变量,我什至可以这样做吗?我还有一些看起来像此处显示first 的二维矩阵,我希望 var 由其中之一分配。

解决方法

最初您的问题带有 C 标签。所以我会开始记住C。

数组没有赋值运算符。如果您想将一个数组的元素复制到另一个数组中,您应该使用标头 memcpy 中声明的标准函数 <string.h> 或使用“手动”编写的循环。

这是一个演示程序

#include <stdio.h>
#include <string.h>

int main(void) 
{
    enum { M = 2,N = 4 };
    
    int first[M][N] = 
    {
        { 7,255,0 },{ 6,0 }
    };
    int second[M][N];
    
    memcpy( second,first,M * N * sizeof( int ) );
    
    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        {
            printf( "%3d ",second[i][j] );
        }
        putchar( '\n' );
    }
    
    return 0;
}

程序输出为

  7 255   0   0 
  6   0 255   0 

另一方面,您可以将数组分配给指针。例如

int first[][4] = {{7,0},{6,0}};
int ( *p )[4] = first;

int first[][4] = {{7,0}};
int ( *p )[sizeof( first ) / sizeof( *first )][4] = &first;

并使用指针访问数组中的元素。

另一种方法是将数组包装在结构中。在这种情况下,您将能够使用结构赋值运算符将一个数组分配给另一个数组。

这是一个演示程序。

#include <stdio.h>
#include <string.h>

int main(void) 
{
    enum { M = 2,N = 4 };
    struct Array
    {
        int a[M][N];
    };
    
    struct Array first =
    {
        {
            { 7,0 }
        }           
    };
    struct Array second;
    
    second = first;
    
    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        {
            printf( "%3d ",second.a[i][j] );
        }
        putchar( '\n' );
    }
    
    return 0;
}

它的输出和上图是一样的

  7 255   0   0 
  6   0 255   0 

如果您使用的是 C++,那么您可以使用标准容器,例如 std::arraystd::vector 或什至它们的组合用于多维数组。

这是一个使用 std::array 的演示程序。

#include <iostream>
#include <iomanip>
#include <array>

int main() 
{
    std::array<std::array<int,4>,2>  first =
    {
        {
            { { 7,0 } },{ { 6,0 } }
        }           
    };

    std::array<std::array<int,2>  second;
    
    second = first;
    
    for ( const auto &row : second )
    {
        for ( const auto &item : row )
        {
            std::cout << std::setw( 3 ) << item << ' ';
        }
        std::cout << '\n';
    }
    
    return 0;
}

像往常一样,程序输出是

  7 255   0   0 
  6   0 255   0 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。