Почему я не могу указать на массив в массиве?

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 chapters[14] = {chp1}; не имеет смысла, почему вы инициализируете массив, используя значение, которое является другим массивом? Здесь нет никаких многомерных массивов, и page& currPart = currChp[0]; явно является ошибкой, потому что currChp[0] на самом деле является chapters[0][0], и вы не можете дважды индексировать одномерный массив.
ShadowRanger 22.06.2024 03:07
page& это не C, это C++.
Etienne de Martel 22.06.2024 03:13

.... а в C вам нужно struct page x;, чтобы создать экземпляр struct page. Вы не можете просто делать page x;, если не typedefусвоили это.

Ted Lyngmo 22.06.2024 03:14

Если вы запрашиваете C++, добавьте тег C++ и удалите тег C. Если вы запрашиваете C, удалите код C++ (ссылки).

Eric Postpischil 22.06.2024 03:28

Вы также можете рассмотреть вопрос Является ли имя массива указателем?

BoP 22.06.2024 13:09
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
5
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас очень, очень простой синтаксический вопрос для начинающих. Обязательно просмотрите материалы учебника.

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`

Спасибо за любезную и профессиональную помощь, которая оказала хорошую помощь прямо в точку. Отмечу это как ответ.

PoppySickleSticks 22.06.2024 04:03

Другие вопросы по теме