将数组作为参数传递给int main()

时间:2011-02-04 02:51:51

标签: c++ parameters default-value

我很难将数组作为参数传递给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();
}

我想将经文数组作为参数传递给main而不是在函数上面声明它。我知道,没有最大的记忆/堆栈意识。但它会消除一条线:)

4 个答案:

答案 0 :(得分:12)

link解释得最好:

  

在C ++中,无法通过   以值为单位的完整内存块   函数的参数,但我们是   允许传递其地址。

这就是为什么你可以用

声明一个函数的原因
void foo (int bar[]);

但你无法宣布

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

它与main()无关。

答案 1 :(得分:7)

解决数组传递而不是不太可能使用main(),由于数组确实作为指针传递,你可以这样做:

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

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

答案 2 :(得分: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();
}

答案 3 :(得分: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;
}