Взгляните на этот массив:Получить значение из массива внутри другого массива [C]
const int *c000[64][1][3] =
{
//Row 1
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 2
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 3
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 4
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 5
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 6*
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 7
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 8
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
};
Игнорировать странный размер и структуру массива, что это не то, что важно. Мне нужно иметь возможность использовать массив внутри этого массива. Например, у меня есть массив под названием H002:
const int h002[18] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0xe0, 0xe0}; //01
Мне нужно, чтобы иметь возможность использовать H002 внутри c000. Такие, как:
{ {h002, 0, 0} },
Это компилируется нормально, однако
myVar = c000[0][0][0];
извлекает адреса с из H002. Мне нужен первый элемент в h002, а не адрес. Я смущен, почему он даже дал мне адрес h002? Я бы предположил, что * h002 будет извлекать адрес, но тогда это вообще не компилируется.
Я видел несколько вопросов по SO, которые очень похожи на шахты, такие как этот:
Creating an array of int arrays in C?
Я пробовал этот конкретный пример выше. Он работает, когда он есть в моем файле main.c, но когда я пытаюсь использовать его в том же файле .c, который содержится в c000 и h002, он не компилируется. Может быть, это связано с этим? Я не уверен, почему это было бы, учитывая, что использование h002 внутри c000 возвращает адрес h002 просто отлично. Странно, что код, представленный в ссылке выше, не будет компилироваться за пределами моего основного файла.
Я чувствую, что делаю какую-то очевидную, небольшую ошибку. Я уже около 5 дней общался с этим и продолжал. Судебные разбирательства и ошибки и исследования ни к чему не привели. Исследование было достаточно сложным, так как, похоже, не так много используют такие массивы, и ни одно из моих результатов не помогло мне.
Вы можете задать вопросы. Я буду рад указать дополнительную информацию, если это необходимо.
EDIT: Большое спасибо Стефану Лехнеру за помощь в решении моей проблемы. Чтобы получить результат, мне нужно было, я должен был сделать
myVar = *(c000[0][0][0]);
Это прекрасно работает. Я также могу добавить любое число, которое мне нравится в конце, чтобы получить различные индексы в h002. Например:
myVar = *(c000[0][0][0] + 7);
Надеюсь, это поможет кому-то в будущем.
'h002' представляет адрес вашего массива, в то время как' * hoo2' или 'h002 [0]' представляет значение, сохраненное в адресе, на который указывает 'h002'. –
Похоже, что я получил это смешение. Если это так, есть ли причина, почему добавление указателя делает так, что моя программа не будет компилироваться? –
Возможно, потому, что c000 не является массивом 'int', а массивом' int * '; попробуйте объявить его как 'const int c000 [64] [1] [3]' –