Передача массива в качестве параметра со значениями по умолчанию в int main () - PullRequest
9 голосов
/ 04 февраля 2011

У меня возникают трудности при передаче массива в качестве аргумента в int main() со значениями по умолчанию.Например:

int main(int a){}

прекрасно работает.Как и

int main(int a = 1){}

Передача int main(), массив также прекрасно работает:

int main(int a[3])

Однако объединение этих двух концепций кажется нарушением:

int main(int a[1] = {0,1})

После значительного количества googleing я не нашел решения.

пожалуйста, помогите мне ТАК, вы моя единственная надежда!

РЕДАКТИРОВАТЬ

Цель этого, короче говоря, состоит в том, чтобы сделать мой код как можно меньше строчек, для задачи, которую мой профессор недавно поставил (не для баллов - просто для обучения).Назначение - создать рекурсивную программу «12 дней дня»

Это моя текущая программа

#include <iostream> 
#include <string>
void p(std::string v){std::cout<<v;}
std::string v[13] = {"A Partridge in a Pear Tree.\n\n","2 Turtle Doves\n","3 French Hens\n","4 Colly Birds\n","5 Gold Rings\n","6 Geese-a-Laying\n","7 Swans-a-Swimming\n","8 Maids-a-Milking\n","9 Ladies Dancing\n","10 Lords-a-Leaping\n","11 Pipers Piping\n","12 Drummers Drumming\n",""};
int main(){
    switch(v[12].length()){
        case 12:system("pause"); return 0;
        case 11:p(v[11]);
        case 10:p(v[10]);
        case 9: p(v[9]);
        case 8: p(v[8]);
        case 7: p(v[7]);
        case 6: p(v[6]);
        case 5: p(v[5]);
        case 4: p(v[4]);
        case 3: p(v[3]);
        case 2: p(v[2]);
        case 1: p(v[1]);
        case 0: p(v[0]); 
    }v[12] += "0";
    main();
}

Я хотел бы передать массив стихов в качестве аргументана основной вместо объявления его выше функции.Я знаю, не самое сознательное / стековое сознание.Но это исключило бы строку:)

Ответы [ 4 ]

12 голосов
/ 04 февраля 2011

Эта ссылка объясняет это лучше всего:

В C ++ невозможно передать полный блок памяти по значению как параметр функции, но мы разрешено передавать его адрес.

Вот почему вы можете объявить функцию с

void foo (int bar[]);

но вы не можете объявить

void foo (int bar[] = {0 ,1});

Это не имеет ничего общего с main().

7 голосов
/ 04 февраля 2011

Обращаясь к передаче массива, а не к маловероятному использованию main (), поскольку массив действительно передается как указатель, вы можете сделать это следующим образом:

int defaultInit[2] = {0,1}; // {0,1} means 2 elements for the array.

int f(int arg[2] = defaultInit)
{
    return 0;
}
3 голосов
/ 04 февраля 2011

Функция main() должна принимать только один или два параметра, а не только количество аргументов командной строки и сами аргументы.

int main(int argc, char* argv[]) {
}

Где argc - количество аргументов, а argv - один массив C-строк, содержащий аргументы.

EDIT:

Он изменил фокус. Вы можете уменьшить количество строк, делая это:

void loop(int i) { 
    if (i < 0) { v[12] += "0"; return; }
    p(v[i]);
    loop(i-1);
}
int main() {
    if (v[12].size() == 12) return;
    loop(v[12].size());
    main();
}
1 голос
/ 04 февраля 2011
#include <stdio.h>
int go(int);
int main( int argc, char*argv[]) {
go(0);
}
int go(int argc) {
const char* lyrics[] = {...};
printf("On the %d%s day of Christmas\nmy true love gave to me\n",argc,
  argc==1?"st":argc==2?"nd":argc==3?"rd":"th" );
for(int i=argc-1;i>0;--i) { printf("%d %s\n",i+1,lyrics[i]); }
printf("%s\n\n",lyrics[0]);

if( argc < 12 ) go(argc+1);
return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...