请原谅我提出这么简单的问题,但是我无法连接SO或其他网站上之前答案中的点。我已经读过默认情况下数组是通过引用传递的,而其他地方我已经读过,数组在传递给函数时会衰减为指针。我试图将数组传递给函数并修改它,但无法协调前两个语句。我不确定我是否传递指针或引用toBin
以及它是否重要。以下代码是我尝试更改b
函数中的toBin
数组。
当我打印修改后的数组时,我得到了一大堆意外文本,比原始分配的大小为11的数组大得多,例如1000000000 submarine blahblahblah
。我的预期输出为1000000000
。
void toBin(int x,char a[]){ //passed by reference by default
std::cout << a << std::endl;
for (int i=9;i>=0;i--){
if(pow(2,i)<=x){
x=x-pow(2,i);
a[9-i]='1'; //i-1 because char b[] is zero indexed
};
}
}
int main()
{
char c[]="submarine";
double combination = pow(2,sizeof(c)-1);
char b[11]={'0','0','0','0','0','0','0','0','0','0'};
toBin(512, b);
for (int i=0;i<combination;i++){
std::cout << *(b+i) << std::endl;
}
}
答案 0 :(得分:0)
基本上你把所有东西都传递给了函数。这打破了你的输出它循环本身。
double combination = pow(2,sizeof(c)-1);
...
for (int i=0;i<combination;i++){
std::cout << *(b+i) << std::endl;
}
您的combination
变量的值可能为2 ^ 8。因此,您将*(b+i)
指向远远超出分配数组的地址。要修复它,您需要将循环更改为:
for (int i=0;i< sizeof(b);i++){