2014-10-11 131 views
-4

將函數內部的參數作爲參數傳遞並將函數聲明塊中的參數聲明爲函數定義中的變量之間有什麼區別?參數傳遞與變量聲明

示例:利用我的意見獲得問題的要點。

#include<iostream> 
     int max=0; 
     int t=0; 
    class stack 
    { 
     int s[10]; 
    public: 
     void push(int); 
     void pop(); 
    }; 
    void stack::push(int y) //argument passed inside function parameter 
    { 
      if(t<=max); 
      { 
       s[t]=y; 
       t=t+1; 
      } 
      else 
      cout<<"Stack overflow"; 
    } 
    void stack::pop() 
    { 
     int item; //variable declared inside function definition 
     if(t>=0) 
     { 
       t=t-1; 
       item=s[t+1]; 
     } 
    } 
+0

我不清楚你在問什麼。你能舉出你提到的兩種情況的代碼嗎? – 2014-10-11 02:26:33

+0

「收納任何美元硬幣的自動售貨機的投幣口」和「投擲硬幣」的區別是什麼... – deviantfan 2014-10-11 02:29:34

+0

您是否在談論K&R參數聲明風格?那麼爲什麼這個問題被標記爲C++? C++從未接受過這種風格。 – 2014-10-11 02:57:52

回答

0

一個差別是在陣列如何解釋:

// returns nonzero iff array1 equals {1, 2, 3} 
int func(int array1[], size_t size1) 
{ 
    int array2[] = {1, 2, 3}; 
    return size1 == sizeof(array2) && memcmp(array1, array2, size1) == 0; 
} 

雖然array2是3個整數的數組,array1是未知大小的陣列,這就是爲什麼我們通常通過用於第二參數尺寸。這是因爲數組傳遞到像這樣的函數時「衰減到指針」。您可以在這裏閱讀:What is array decaying?

在C++中使用值模板來處理數組大小有一些很有趣的技術,但上述對於C和絕大多數C++代碼也是如此。

除了數組之外,函數參數中使用的C類型與局部變量中使用的C類型幾乎相同。

+0

謝謝約翰。像雷霆雖然 – Amu 2014-10-11 03:02:23

0

一個區別是參數被調用者初始化,但局部變量必須由函數初始化。

int somefunc(int arg) 
{ 
    int local = 0; 
    … 
    return local + arg; 
} 

當調用該函數時:

int x = somefunc(23); 

在函數變量arg與由調用代碼值23初始化。但是,局部變量local必須顯式初始化(​​在本例中爲= 0;如果它是類類型,則由相應的構造函數)。諸如int等未明確初始化的內置類型的局部變量會獲得準隨機值。

+0

謝謝。現在,這是承擔新手的方式。並且我正在糾正** iostream標題 – Amu 2014-10-11 03:20:49