如何遍历数组以将它们复制到另一个 uint32_t 类型的数组中?
How to iterate through arrays to copy them into another array of type uint32_t?
我创建了一个由整数数组结构 states[2] 组成的 C 程序。我还需要一个名为 store 的 uint32_t 类型数组。我只想将数组 states[0] 的内容复制到 store[0],将 states[1] 的内容复制到 store[1]。我对 char 数组使用了这种方法,它似乎有效。我的代码如下所示:
#include <stdlib.h>
#include <stdio.h>
int main()
{
uint32_t *store[2];
int i;
int *states[2];
int states[0] = {1,0,0,1};
int states[1] = {0,0,0,2};
for (i = 0; i < 3; i++)
{
store[i] = states[i];
i++;
}
}
但是代码没有执行,并说我声明的数组无效format.I我不确定这是否是正确的方法。
有人可以帮我解决这个问题吗?
我已经重写了您的示例 - 强制数组的大小 - 在这里,它有效。
编辑 - 添加 printf 调用以显示数组存储的内容。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int store[3][4];
int i;
int states[3][4] = {{1,0,0,1},{0,0,0,2}};
for(i=0; i<3; i++)
{
printf( "store[%d] = ", i );
for( int inner = 0; inner < 4; inner++ )
{
store[i][inner] = states[i][inner];
printf( "%d ", store[i][inner] );
}
printf( "\n" );
}
return( 0 );
}
在数组中创建指针时,您确实需要分配然后复制。
你的代码有两个问题,
首先,
int *states[2];
int states[0] = {1,0,0,1};
int states[1] = {0,0,0,2};
有问题。当访问一个变量时,类型没有被提及,它只在定义时需要。所以,使用 int states[0]
或 ..[1]
是无效的。
然后,其次,
states[0] = {1,0,0,1};
state[0]
是 int *
类型,您正试图用 int
的大括号括起来的初始化列表来初始化它。这也不对。
您可以修改代码以在访问数组元素时删除类型并使用复合文字,最终如下所示
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h> //added for uint32_t
int main(void) //corrected signature
{
uint32_t *store[2];
int i;
int *states[2];
states[0] = (int []){1,0,0,1}; //compound literal, C99 and above
states[1] = (int []){0,0,0,2};
for (i = 0; i < 2; i++) //bound corrected
{
store[i] = states[i];
//i++; remove this, you're incrementing twice
}
}
我创建了一个由整数数组结构 states[2] 组成的 C 程序。我还需要一个名为 store 的 uint32_t 类型数组。我只想将数组 states[0] 的内容复制到 store[0],将 states[1] 的内容复制到 store[1]。我对 char 数组使用了这种方法,它似乎有效。我的代码如下所示:
#include <stdlib.h>
#include <stdio.h>
int main()
{
uint32_t *store[2];
int i;
int *states[2];
int states[0] = {1,0,0,1};
int states[1] = {0,0,0,2};
for (i = 0; i < 3; i++)
{
store[i] = states[i];
i++;
}
}
但是代码没有执行,并说我声明的数组无效format.I我不确定这是否是正确的方法。 有人可以帮我解决这个问题吗?
我已经重写了您的示例 - 强制数组的大小 - 在这里,它有效。
编辑 - 添加 printf 调用以显示数组存储的内容。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int store[3][4];
int i;
int states[3][4] = {{1,0,0,1},{0,0,0,2}};
for(i=0; i<3; i++)
{
printf( "store[%d] = ", i );
for( int inner = 0; inner < 4; inner++ )
{
store[i][inner] = states[i][inner];
printf( "%d ", store[i][inner] );
}
printf( "\n" );
}
return( 0 );
}
在数组中创建指针时,您确实需要分配然后复制。
你的代码有两个问题,
首先,
int *states[2];
int states[0] = {1,0,0,1};
int states[1] = {0,0,0,2};
有问题。当访问一个变量时,类型没有被提及,它只在定义时需要。所以,使用 int states[0]
或 ..[1]
是无效的。
然后,其次,
states[0] = {1,0,0,1};
state[0]
是 int *
类型,您正试图用 int
的大括号括起来的初始化列表来初始化它。这也不对。
您可以修改代码以在访问数组元素时删除类型并使用复合文字,最终如下所示
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h> //added for uint32_t
int main(void) //corrected signature
{
uint32_t *store[2];
int i;
int *states[2];
states[0] = (int []){1,0,0,1}; //compound literal, C99 and above
states[1] = (int []){0,0,0,2};
for (i = 0; i < 2; i++) //bound corrected
{
store[i] = states[i];
//i++; remove this, you're incrementing twice
}
}