参数传递与变量声明

时间:2014-10-11 02:24:53

标签: c++

将函数内部的参数作为参数传递并将参数声明为函数定义中函数声明块内的变量之间的区别是什么?

示例:利用我的评论来获得问题的要点。

#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];
         }
    }

2 个答案:

答案 0 :(得分: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是一个未知大小的数组,这就是我们通常为该大小传递第二个参数的原因。这是因为数组&#34;衰减到指针&#34;当传递到这样的函数时。您可以在此处阅读:What is array decaying?

使用数组大小​​的值模板在C ++中处理这个问题有更高级的技术,但上面也适用于C和大多数C ++代码。

除了数组之外,函数参数中使用的C类型与局部变量中使用的C类型几乎相同。

答案 1 :(得分:0)

一个区别是参数由调用者初始化,但局部变量必须由函数初始化。

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

调用该函数时:

int x = somefunc(23);

函数中的变量arg由调用代码初始化为值23。但是,必须显式初始化局部变量local(在本例中为= 0;如果是类型,则由适当的构造函数)。未明确初始化的内置类型(如int)的局部变量会获得准随机值。