C ++ позволяет передавать по ссылке, но не в C.
Вопрос в том, как использовать функцию C для обновления ссылки на массив структуры, передаваемой указателем.
Мой вопрос лучше объяснить с помощью кода.
enum ch_numbers {
CH_00,
CH_01,
CH_02,
CH_03,
CH_04,
CH_05,
};
enum sen_numbers {
SEN_0,
SEN_1,
SEN_2,
SEN_3,
SEN_4,
};
struct ch_sen_map {
enum ch_numbers ch_num;
enum sen_numbers sen_num;
};
struct ch_sen_map map1[] = {
{CH_02, SEN_3},
{CH_03, SEN_1},
{CH_01, SEN_4},
};
struct ch_sen_map map2[] = {
{CH_01, SEN_1},
{CH_02, SEN_3},
{CH_04, SEN_2},
};
void UpdateMap(struct ch_sen_map * map)
{
map = map1;
}
struct ch_sen_map * GetMap(void)
{
return map1;
}
void main()
{
int i;
struct ch_sen_map *pMap;
int mapsize = sizeof(map1)/sizeof(struct ch_sen_map);
printf("\n Expected map1 (straight forward):");
for (i=0; i<mapsize; i++) {
printf("\n %d : %d", map1[i].ch_num, map1[i].sen_num);
}
pMap = map2;
printf("\n Expected map2 :");
for (i=0; i<mapsize; i++) {
printf("\n %d : %d", pMap[i].ch_num, pMap[i].sen_num);
}
UpdateMap(pMap); // Not working as I expect
printf("\n Expected map1 :");
for (i=0; i<mapsize; i++) {
printf("\n %d : %d", pMap[i].ch_num, pMap[i].sen_num);
}
pMap = GetMap();
printf("\n Expected map1 :");
for (i=0; i<mapsize; i++) {
printf("\n %d : %d", pMap[i].ch_num, pMap[i].sen_num);
}
}
И вывод:
Expected map1 (straight forward):
2 : 3
3 : 1
1 : 4
Expected map2 :
1 : 1
2 : 3
4 : 2
Expected map1 : < -- this is what I want to fix.
1 : 1 <-- These are map2 values, Not Map1 :(
2 : 3
4 : 2
Expected map1 :
2 : 3
3 : 1
1 : 4
Я в основном хочу переписать / исправить функцию UpdateMap так, чтобы она работала как GetMap, за исключением возврата. [Я все еще не могу иметь смысл].
Я хочу, чтобы функция вызывающего абонента определяла указатель карты * pMap (в данном случае main). Когда я передаю этот указатель карты в функцию (UpdateMap), функция UpdateMap обновляет значение указателя, чтобы указывать либо на map1, либо на map2. И что более важно, обновите ссылку на указатель карты, чтобы затем, когда основная функция использовала указатель карты, она указывала на карту, обновленную функцией UpdateMap.
В приведенном выше коде UpdateMap получает * pMap в качестве параметра функции, и его значение можно изменить для использования только внутри этой функции.