2012-08-28 65 views
1

我在学习指针和引用,但是我很难理解概念。我需要在主函数中声明一个变量,然后通过用户输入的函数初始化它,而不返回任何内容。我试过了:初始化变量透过函数

#include <iostream> 
using namespace std; 

void input(int &num){ 
    cout << "Enter A Number" << endl; 
    cin >> static_cast<int>(num); 
} 
int main(){ 
    int x; 
    input(x); 
    cout << "The Number You Entered Was " << x << "!" << endl; 
    return 0; 
} 
+2

然后呢? – Vijay

回答

2

你做正确,除了那static_cast<int>那里。那里在做什么?是什么让你使用这个演员?

摆脱铸造,它应该工作。这

cin >> num; 

是你所需要的。

P.S.请记住,在C++术语中,术语初始化为具有非常明确的含义。形式上,初始化始终是变量定义的一部分。无论您在变量定义后不再对初始化进行哪些更改。在你的情况下,变量x被声明为没有初始值设定项,这意味着它开始使用未初始化的(具有不确定的值)。后来你把一些特定的值到xcin阅读它,但是这不再初始化(在长期的C++的意思)。

这可能是一些确定的初始值来声明x一个好主意,像

int x = 0; 

虽然个人我不是“假”初始化的大风扇。

+0

但你不在字符串中阅读吗? – Derp

+0

@Derp:String?什么字符串? “串”从哪里来? – AnT

+0

我只是想,你会读一个字符串,即使它是一个数字。就像用户输入“one”一样。无论如何,我得到未初始化的局部变量x? – Derp

1

您应该删除static_cast

cin >> num; 

std::cin's operator>>具有采用整数类型的重载。

注意,你是不是通过函数初始化变量的。您通过将一个引用传递给一个函数来为变量赋值。

0

无需为static_cast东西。你的功能被赋予一个参考int,和你想读的int。由于您已经传递了对变量的引用,因此您的input函数中的更改将反映在调用者中。