указатели всегда получают меня в программировании на C.Как передать указатель на массив структур в функцию
У меня возникли проблемы, я хочу передать указатель на массив структур в функцию, чтобы он мог модифицировать структуры, а затем передать элементы массива позже в других функциях. Проблема в том, что, когда я думаю, что я индексирую массив и указываю его на модифицированную структуру, я пытаюсь посмотреть на членов позже, они не являются измененными значениями. Вот некоторые из моего кода
typedef struct
{
int rows;
int columns;
int *data;
} Mat;
int main(void)
{
Mat result, decoded_result;
int result_data[8] =
{ 0, 0, 0, 0, 0, 0, 0, 0 };
int decoded_data[4] =
{ 0, 0, 0, 0 };
result.columns = 1;
result.rows = 8;
result.data = &result_data[0];
decoded_result.columns = 1;
decoded_result.rows = 4;
decoded_result.data = &decoded_data[0];
Mat m1, m2, m3, m4, m5;
m1.rows = m2.rows = m3.rows = m4.rows = m5.rows = 4;
m1.columns = m2.columns = m3.columns = m4.columns = m5.columns = 1;
int md1[4], md2[4], md3[4], md4[4], md5[4];
m1.data = &md1[0], m2.data = &md2[0], m3.data = &md3[0], m4.data = &md4[0], m5.data =
&md5[0];
Mat mat_array[10] =
{ m1, m2, m3, m4, m5 };
decode_data(&result, &decoded_result, mat_array);
return 0;
}
int decode_data(Mat *result, Mat *decoded_result, Mat *mat_array)
{
int ii;
int size_of_EEPROM = 5;
//steps to decode data
for (ii = 0; ii < size_of_EEPROM; ii++)
{
decode(result, decoded_result); //decodes hamming 8,4, works
mat_array[ii] = *decoded_result; ///This is where the problem is
}
return 0;
}
Заранее спасибо за помощь с указателями :)
Шаг Один: отступ/форматирования кода, так что легче читать. –
Что вы смотрите после 'decode_data()'. Элементом 'mat_array' являются копии' m1, m2, ... ', поэтому последнее не изменится. –
Это поможет, если вы закипите этот код дальше, чтобы он содержал только одну или две матрицы и ненужные петли или другие вещи. Вы также можете запустить свою программу под 'valgrind', если вы работаете в Linux, чтобы проверить наличие ошибок памяти - они слишком часто встречаются в этом типе кода. –