默认情况下C++数组作为参数引用
C++ array as parameter reference by default?
原谅我问这么简单的问题,但我无法将SO或其他网站上以前的答案联系起来。我已经读过数组默认通过引用传递,而在其他地方我读到数组在传递到函数时衰减到指针。我正在尝试将数组传递给函数并对其进行修改,但无法协调前两个语句。我不确定我是否传递了指向toBin
的指针或引用,以及它是否重要。以下代码是我尝试在 toBin
函数中更改b
数组。
当我打印修改后的数组时,我得到一大堆意想不到的文本,比原始分配的大小为 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;
}
}
基本上,您将所有内容都传递给函数。破坏输出的东西是循环本身。
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++){
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 通过常量引用传递参数的矩阵模板类
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 具有常量引用参数的函数模板专用化
- 作为参数引用
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 如何传递带有通过引用传递的结构参数的函数?
- 将输入参数作为右值引用传递?
- 使用引用与指针将数组作为参数传递
- 根据模板参数引用不同基类的函数
- 默认情况下C++数组作为参数引用
- 对指针C++的参数引用
- 作为非类型模板参数引用
- 重用返回语句或按参数引用返回
- 将参数引用传递给函数C++
- 从另一个参数引用的模板可变参数
- 成员变量多态性和参数引用
- 按参数引用或按参数引用之间的差异
- 无法实例化抽象类:为什么模板参数(引用)导致这种情况