2011-02-04 11 views
6

Mam trudności z przekazaniem tablicy jako argumentu do int main() z wartościami domyślnymi. Na przykład:Przekazywanie tablicy jako parametru z domyślnymi wartościami do int main()

int main(int a){} 

działa cudownie. Podobnie jak

int main(int a = 1){} 

Przechodząc int main() tablica działa również doskonale:

int main(int a[3]) 

jednak połączenie tych dwóch koncepcji wydaje zerwaniu:

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

Po znacznej ilości googleing, że nie znalazłem rozwiązania.

Proszę, pomóż mi, więc jesteś moją jedyną nadzieją!

EDIT

Celem tego, w skrócie, jest, aby mój kod tak mało linii, jak to możliwe, na wyzwanie mój profesor niedawno wydane (nie dla punktów - tylko do nauki). Przypisanie jest stworzenie rekurencyjnego programu "12-days-of-chirstmas"

To jest mój obecny program

#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(); 
} 

Chciałbym przekazać w tablicy wersów jako argument do głównej zamiast deklarowanie go nad funkcją. Wiem, nie najbardziej świadomi stosu/sterty. Ale wyeliminowałoby to linię :)

+1

Dlaczego chcesz zrób to i dlaczego musisz to zrobić z 'main'? –

+1

Funkcja 'main()' przyjmująca tylko 'int' lub tablicę nie jest poprawną formą' main() 'w standardowym C++. Co próbujesz tutaj zrobić? –

+0

int a [1] jest pojedynczym elementem w tablicy, a nie tablicą jednego elementu. – Jordan

Odpowiedz

12

Ten link wyjaśnia to najlepiej:

W C++ nie jest możliwe, aby przejść kompletny blok pamięci o wartość jako parametr do funkcji, ale jesteśmy może przekazać swój adres.

Dlatego można zadeklarować funkcję z

void foo (int bar[]); 

ale nie można zadeklarować

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

To nie ma nic wspólnego z main().

+0

Doskonały link i proste wyjaśnienie. Awansuj dla ciebie (nie ma mowy o awansie jako funkcji niskiej reputacji) –

+0

Z C++ 0x możesz! Ale ta tablica zostanie zniszczona, gdy wyjdzie poza zakres. – Vanuan

3

Funkcja main() powinna otrzymać tylko brak lub dwa parametry, liczbę argumentów wiersza poleceń i same argumenty.

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

przypadku argc jest ilość argumentów i argv jest Tablica C-łańcuchów zawierających argumentów.

EDIT:

Zmienił ostrość. Można zmniejszyć liczbę linii w ten sposób:

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(); 
} 
+0

Tak więc główny nie może otrzymać domyślnych argumentów, jako konstruktor lub inna funkcja? przykład: int main (int a = 5) {} –

+0

To nie jest standard. Ale możesz zrobić wiele rzeczy, aby zmniejszyć liczbę linii. Przykład "na" zredukuje tak wiele linii. –

+0

"Dla" byłoby całkiem korzystne! Niestety, jednym z wymagań było "brak pętli", ponieważ próbuje nas nauczyć siły rekurencji. –

1
#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; 
} 
7

Adresowanie tablicę przechodzącego zamiast nieprawdopodobnym wykorzystania main(), ze względu na tablicy naprawdę jest przekazywana jako wskaźnik, można zrobić to tak:

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

int f(int arg[2] = defaultInit) 
{ 
    return 0; 
} 
+0

Interesujący kod. Dzięki za odpowiedź, pomaga! –

Powiązane problemy