struct page {
int a;
int b;
};
page chp1p1 = { 1, 2 }; // chapter 1 page 1
page chp1[12] = {
chp1p1
};
page chapters[14] = {
chp1
};
int main(){
page& currChp = chapters[0];
page& currPart = currChp[0];
printf("If we are here then no errors");
return 0;
}
Ошибка в currChp[0].
Попробовал указать на массив в массиве. Элементы — это структуры. Я просто не хочу использовать переключатель. С моей точки зрения, все, что я делаю, это указываю на массив внутри массива по их ссылке. Так что я не понимаю, почему это ошибка.
page&
это не C, это C++.
.... а в C вам нужно struct page x;
, чтобы создать экземпляр struct page
. Вы не можете просто делать page x;
, если не typedef
усвоили это.
Если вы запрашиваете C++, добавьте тег C++ и удалите тег C. Если вы запрашиваете C, удалите код C++ (ссылки).
Вы также можете рассмотреть вопрос Является ли имя массива указателем?
У вас очень, очень простой синтаксический вопрос для начинающих. Обязательно просмотрите материалы учебника.
struct index
{
int chapter;
int page;
};
struct index indices[2] =
{
{ 0, 0 },
{ 1, 24 },
// etc
};
Однако, похоже, вам нужен поиск (номер страницы ⟶ главы).
Для этого вам понадобится всего лишь массив индексов на страницах. int
подойдет.
Кроме того, когда вы инициализируете массив статически, вы можете опустить количество элементов в массиве (поскольку компилятор может определить это самостоятельно).
#include <stdio.h>
int chapter_to_page[] =
{
0,
24,
//... and so on
};
int main(void)
{
printf( "Chapter 1 begins on page %d\n", chapter_to_page[1] );
return 0;
}
Если вы собираетесь сделать что-то вроде загрузки файла с информацией о том, на каких страницах начинаются отдельные главы, вам нужно просто иметь большой массив и отслеживать его размер:
#define MAX_NUM_CHAPTERS 100
int chapter_to_page[MAX_NUM_CHAPTERS] = {0};
int num_chapters = 0;
Добавить поиск к этому легко:
chapter_to_page[num_chapters++] = 0;
chapter_to_page[num_chapters++] = 24;
// ... etc
// be careful to not let `num_chapters` get bigger than `MAX_NUM_CHAPTERS`
Спасибо за любезную и профессиональную помощь, которая оказала хорошую помощь прямо в точку. Отмечу это как ответ.
page chapters[14] = {chp1};
не имеет смысла, почему вы инициализируете массив, используя значение, которое является другим массивом? Здесь нет никаких многомерных массивов, иpage& currPart = currChp[0];
явно является ошибкой, потому чтоcurrChp[0]
на самом деле являетсяchapters[0][0]
, и вы не можете дважды индексировать одномерный массив.