在c ++中:初始化函数中的变量与在函数头中声明变量之间的区别是什么?

时间:2014-03-06 08:59:00

标签: c++

区别仅在于你可以用它们做什么?

另外,如何将函数中的变量结果传递给另一个函数?最近,我不得不这样做,但变量没有将父函数中的代码传递给另一个函数。

  void add(int a, int b)

VS

   void add(int a)
        int b;
        a+b;

用于将变量的结果从父函数传递给函数:

void add(int a, int b, double c)
    a+b=c;


void divide(double c, int d, double e)
    c / d = e; 

4 个答案:

答案 0 :(得分:1)

区别在于变量的scope。函数体中声明的变量将具有block scope。标题中声明的变量将具有file scope

答案 1 :(得分:1)

这两个功能之间存在很大差异(我添加了一些缺失的细节)

void add(int a, int b)
{
   int c = a + b;
}

void add(int a)
{
   int b = 10;
   int c = a + b;
}

在第一种情况下,您可以调用传递两个参数的函数。例如

add( 2, 5 );

并且在函数变量c内部将具有取决于两个参数的值(如果a = 2,b = 5然后c = 7)。

在第二种情况下,您可以调用仅传递一个参数的函数

add( 2 );

因此,如果指定为参数2,那么您将得到c将等于12.您无法更改调用该函数的b的值,因为您无权访问它。

考虑到此代码不会被编译

void add(int a, int b, double c)
{
    a + b = c;
}

您不能指定表达式a + b

如果需要将结果从一个函数传递给另一个函数,那么可以通过函数返回对象传递它。例如,在第一个函数中将返回类型从void更改为int

int add(int a, int b)
{
   int c = a + b;
   return c;
}

在这种情况下,您可以将结果传递给“父”函数。例如

#include <iostream>

int add(int a, int b)
{
   int c = a + b;
   return c;
}

void add(int a, int b, double c)
{
    std::cout << a + b + c;
}


int main()
{
   int x = 10;
   int y = 20;
   int z = 30;

   add( x, y, add( x, z ) )'
}

输出将等于70(x + y +(x + z))。在这个例子中,有两个带名称的重载函数,其中一个函数有两个参数,另一个函数有三个参数。

此外,您可以使用通过使用指针引用传递的参数来获取函数结果。

例如

#include <iostream>


void add(int a, int b, double &c)
{
    c = a + b;
}


int main()
{
   int x = 10;
   int y = 20;
   int z;

   add( x, y, z ) );

   std::cout << "z = " << z << std::endl;
}

结果将是z = 30。

如果要使用poinet,则代码将显示为

#include <iostream>


void add(int a, int b, double *c)
{
    *c = a + b;
}


int main()
{
   int x = 10;
   int y = 20;
   int z;

   add( x, y, &z ) );

   std::cout << "z = " << z << std::endl;
}

结果与30相同。

答案 2 :(得分:0)

void add(int a, int b, double c)
    a+b=c;

void divide(double c, int d, double e)
    c / d = e; 

这段代码完全是胡说八道。让我尝试为你解决它:

int add(int a, int b)
{
    return a + b;
}

double divide(double c, int d)
{
    return c / d;
}

不确定为什么会将d限制为int。但是,嘿,当我只能使用好的+/来开始时,我甚至没有看到添加和划分函数的重点:)

答案 3 :(得分:0)

如果在标题中声明该函数,则可以在包含该标头的所有源文件中访问该函数。这可以使const,static或extern。如果您将其设为extern,请不要忘记您还需要在其中一个源文件中定义变量:

// header.h
#pragma once

int a;             //these variables will be usable in all the source files that include this header
static const int b = 5;  //this is a const static variable, you cannot assign a new value to it.
extern int c;  // this is extern, must be defined in a soruce file

int fun(int); // and this is a function taking an int, returning another int

和源文件:

#include "header.h"

int fun(int g)
{
    return g + 1;
}

int c = 7;

int main()
{
   a = 5;    // assign a value to it
   fun(a);   // this is how you use it
}

如果初始化(假设初始化意味着声明)函数中的变量,则只能从该函数访问该变量。

关于函数中变量对另一个函数的结果&#34;可能你想创建一个带参数的函数。请参阅上面的代码。