2014-10-11 56 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