将二维矩阵分配给 C++/Arduino 中的另一个变量
Assigning a 2d-matrix to another variable in C++/Arduino
我有一个数组或矩阵,如 first[][4] = {{7, 255, 0, 0}, {6, 0, 255, 0}}
和另一个变量。我如何将二维矩阵分配给变量,我什至可以这样做吗?我还有一些二维矩阵,看起来像这里显示的 first
,我希望 var
由其中之一分配。
最初你的问题有 C 标签。所以我就开始记C了。
数组没有赋值运算符。如果您想将一个数组的元素复制到另一个数组中,您应该使用在 header <string.h>
中声明的标准函数 memcpy
或使用“手动”编写的循环。
这是一个演示程序
#include <stdio.h>
#include <string.h>
int main(void)
{
enum { M = 2, N = 4 };
int first[M][N] =
{
{ 7, 255, 0, 0 },
{ 6, 0, 255, 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, 255, 0, 0}, {6, 0, 255, 0}};
int ( *p )[4] = first;
或
int first[][4] = {{7, 255, 0, 0}, {6, 0, 255, 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, 255, 0, 0 },
{ 6, 0, 255, 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::array
或 std::vector
,甚至可以将它们组合用于 multi-dimensional 数组。
这是一个使用std::array
.
的演示程序
#include <iostream>
#include <iomanip>
#include <array>
int main()
{
std::array<std::array<int, 4>, 2> first =
{
{
{ { 7, 255, 0, 0 } },
{ { 6, 0, 255, 0 } }
}
};
std::array<std::array<int, 4>, 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
我有一个数组或矩阵,如 first[][4] = {{7, 255, 0, 0}, {6, 0, 255, 0}}
和另一个变量。我如何将二维矩阵分配给变量,我什至可以这样做吗?我还有一些二维矩阵,看起来像这里显示的 first
,我希望 var
由其中之一分配。
最初你的问题有 C 标签。所以我就开始记C了。
数组没有赋值运算符。如果您想将一个数组的元素复制到另一个数组中,您应该使用在 header <string.h>
中声明的标准函数 memcpy
或使用“手动”编写的循环。
这是一个演示程序
#include <stdio.h>
#include <string.h>
int main(void)
{
enum { M = 2, N = 4 };
int first[M][N] =
{
{ 7, 255, 0, 0 },
{ 6, 0, 255, 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, 255, 0, 0}, {6, 0, 255, 0}};
int ( *p )[4] = first;
或
int first[][4] = {{7, 255, 0, 0}, {6, 0, 255, 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, 255, 0, 0 },
{ 6, 0, 255, 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::array
或 std::vector
,甚至可以将它们组合用于 multi-dimensional 数组。
这是一个使用std::array
.
#include <iostream>
#include <iomanip>
#include <array>
int main()
{
std::array<std::array<int, 4>, 2> first =
{
{
{ { 7, 255, 0, 0 } },
{ { 6, 0, 255, 0 } }
}
};
std::array<std::array<int, 4>, 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