簡體   English   中英

將數組(&)傳遞給函數c ++,運行時錯誤

[英]passing arrays (&) to functions c++, runtime error

#include <iostream>
#include <cmath>
using namespace std;

void input(int(&x)[10]);
int copy(int (&x)[10], int(&y)[10]);
void read(int(&x)[10], int b);


int main()
{
    int m[10], v[10], c; 
    input((&m)[10]);
    read((&m)[10], 10);
    c = copy((&m)[10], (&v)[10]);
    read((&v)[c],c);
    system("PAUSE");
    return 0;
}

void input(int(&x)[10])
{
    for(int i=0; i < 10; i++)
    {
        cout<<"enter number "<<i+1<<": ";
        cin>>x[i];
    }
}

void read(int(&x)[10], int b)
{
    for(int i=0; i < b; i++)
    {
        cout<<"number("<<i+1<<"): "<<x[i];
    }
}

int copy(int(&x)[10], int(&y)[10])
{
    int c = 0;
    for(int i = 0; i < 10; i++)
    {
        if(x[i] % 3 == 0)
        {
            y[c]=x[i];
            c++;
        }
    }
    return c;
}

輸入第一個數字時會遇到運行時錯誤,我將不勝感激,我認為問題在於將數組傳遞給函數的方式,但我不確定該程序的目標是獲取10 int的輸入數組m中的-s,然后將那些可被3整除的變量傳輸到v,然后將兩者輸出

input((&m)[10]);

這並沒有按照您的想象做。 &m是指向數組的指針,因此(&m)[10]是對數組的第十個元素的引用; 換句話說,到距離m末尾一定距離的無效內存塊。

您要input(m); 傳遞對m的引用。

傳遞數組的語法不正確 (盡管可以編譯)。 它應該很簡單,

input(m);
read(m, 10);
c = copy(m, v);
read(v, c);

int(&x)[10]應該用於函數原型,在該函數原型中您將通過引用接收大小為10的數組。 在調用函數時,只需傳遞變量名即可。

將數組傳遞給c ++無效。 除非您使用指針或創建包含數組的類並將其傳遞,否則這將導致運行時錯誤。

無效輸入(int(&x)[10])

在此函數簽名中:

  • x是參數名稱
  • int(&)[10]是參數類型(對10個int數組的引用)。

現在考慮一下如何調用此函數,大概是通過復制/粘貼:

 input((&m)[10]); 

使用任何函數調用,您只需編寫變量的名稱,而不是變量的類型。 因此,當您將數組傳遞給函數時,應該只寫:

input(m);

(由於&的三重含義,目前您正在傳遞內存中不存在的其他內容。)

在其他傳遞數組引用的地方也一樣。

您正在傳遞指向函數的指針,而不是引用。

input((&m)[10]);

在上面的行中, &取得m的地址,並將其變成指針。 該函數不期望指針。 跳過&中的呼叫,它應該可以工作。

另外,建議您嘗試查找描述指針和引用之間差異的教程。 快速的Google搜索在Stack Overflow上提出了這個問題,並給出了一些好的答案。

擴展上面的答案:m [10]在數組的最后一個元素之后,因此發生的情況是您正在讀取變量外部的內存,這通常被認為是不好的形式。

暫無
暫無

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

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