2011-02-04 127 views
6

我無法將數組作爲參數傳遞到帶有默認值的int main()。 例如:將數組作爲參數傳遞給默認值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天的-chirstmas」節目

這是我目前的計劃

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

我想詩句的陣列中作爲參數傳遞給主,而不是在函數上面聲明它。我知道,不是最有記憶/堆棧的意識。但它會消除一行:)

+1

你爲什麼要做到這一點,爲什麼你必須做到「主」? – 2011-02-04 02:54:33

+1

在標準C++中,只接受「int」或數組的main()函數不是`main()`的有效形式。你想在這裏做什麼? – 2011-02-04 02:55:05

+0

int a [1]是數組中的單個元素,而不是一個元素的數組 – Jordan 2011-02-04 02:55:11

回答

12

link最好地解釋它:

在C++中,不可能通過值作爲 參數來傳遞存儲器的 完整塊到一個函數,但我們是 允許傳遞它的地址。

這就是爲什麼你可以聲明一個函數

void foo (int bar[]); 

,但你不能聲明

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

它無關main()

3

main()函數應該只接收無參數或兩個參數的命令行參數和參數本身的數量。

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

argc哪裏是參數的數量和argv是包含參數C字符串的一個陣列。

編輯:

他改變的焦點。 可以減少線的數量這樣做:

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
#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

陣列傳遞,而不是不可能使用的main(),解決由於數組的指針真的被傳遞,你可以做這樣的:

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

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