我很难将数组作为参数传递给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而不是在函数上面声明它。我知道,没有最大的记忆/堆栈意识。但它会消除一条线:)
答案 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;
}