Похоже, вы не понимаете, как объявлять и использовать массив из массивов string
и указателей на string
.
string part1[ARRAY_SIZE] = { "...", "...", ...
Вы объявляете part1
массивом строки .Но затем возникает некоторая путаница в том, как передать этот массив в printpart1()
.Вы предоставляете объявление как:
void printpart1(..., string *printpart1[18]) {
Где printpart1
указывает, что параметр printpart1
будет массивом указателей на строку.Затем вы вызываете printpart1()
как:
printpart1(ARRAY_SIZE, &part1PTR);
Где вы объявили part1PTR
как указатель на строку .Передавая адрес part1PTR
, вы предоставляете printpart1()
указатель на указатель на string
.
, чтобы получить фактическую строкудля печати сначала необходимо разыменовать printpart1
(например, *printpart1
), чтобы получить указатель на строку перед применением любого смещения и разыменования, например *(*printpart1 + i)
.
Например, следующие строки обеспечат вывод нужной строки:
void printpart1(int length, string *printpart1[18]) {
int dummy;
for (int i = 0; i < length; i++)
cout << *(*printpart1 + i) << endl;
cin >> dummy;
}
( примечание: *(*printpart1 + 1)
эквивалентно (*printpart1)[i]
. Все, что имеет больше смыслаВам обычно используется вторая форма)
Просто передайте массив
Теперь все это чрезмерно усложняет то, что должно быть так просто, как передача самого массива вprintpart1()
, например, если вы измените свою функцию на:
void printpart1(int length, string *printpart1) {
int dummy;
for (int i = 0; i < length; i++)
cout << printpart1[i] << endl;
cin >> dummy;
}
Вам больше не нужен part1PTR
, и вы можете просто вызвать вашу функцию с помощью:
printpart1 (ARRAY_SIZE, part1);
Просмотрите все, подумайтеи дайте мне знать, если у вас есть дополнительные вопросы.