Как перебрать массивы, чтобы скопировать их в другой массив типа uint32_t?
Я создал C-программу, состоящую из целочисленных структур массива состояний [2]. Мне также нужен массив типа uint32_t с именем store. Я просто хочу скопировать содержимое массива состояний [0] в хранилище [0] и содержимое состояний [1] в хранилище [1]. Я использовал этот подход для массивов символов, и это, похоже, сработало. Мой код выглядит так:
#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++;
}
}
Код, однако, не выполняется и говорит, что массивы, которые я объявил, имеют недопустимый формат. Я не уверен, что это правильный подход для этого. Может ли кто-нибудь помочь мне с этим.
2 ответа
Я переписал ваш пример - форсирование размеров массивов - в этом все работает.
РЕДАКТИРОВАТЬ - Добавление вызовов 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
s. Это тоже не правильно.
Вы можете изменить свой код для удаления типов при доступе к элементам массива и для использования составного литерала, наконец, что-то вроде ниже
#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
}
}