簡體   English   中英

默認情況下C ++數組作為參數引用?

[英]C++ array as parameter reference by default?

原諒我提出這樣一個簡單的問題,但是我無法將SO或其他網站上以前的答案中的點點滴滴連串起來。 我讀過數組默認情況下是按引用傳遞的,在其他地方我讀過數組在傳遞給函數時會衰減到指針。 我正在嘗試將數組傳遞給函數並對其進行修改,但無法協調前兩個語句。 我不確定是否要傳遞指向toBin的指針或引用,甚至是否重要。 以下代碼是我嘗試在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;
    }
}

基本上,您可以很好地將所有內容傳遞給該函數。 破壞您輸出的是循環本身。

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++){

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM