【发布时间】:2012-02-01 07:45:58
【问题描述】:
我对 C++ 很陌生,所以我希望有人能解释一下。我遇到了几个类似的话题,但我需要澄清一下。
因此,将已声明但未初始化的本地字符串传递给函数似乎是有效的。但是为什么当你用 int 或 float 尝试编译器时会报错呢??
无论是字符串、浮点数还是整数,内存地址在声明时都会被引用,即使它可能是“垃圾”
#include <iostream>
using namespace std;
void load(int);
int main()
{
int salary;
load(salary);
return 0;
}
void load(int sal)
{
cout << "your salary: " << endl;
cin >> sal;
cout << sal << endl;
}
如果我将 int 或 float 声明为全局变量,它会按预期工作而不会发出任何警告。 那么在全局空间中声明变量是更好的做法吗(我希望不是)?
所以把它放在全局中,它可以工作:
#include <iostream>
using namespace std;
int salary;
void load(int);
int main()
{
load(salary);
return 0;
}
void load(int sal)
{
cout << "your salary: " << endl;
cin >> sal;
cout << sal << endl;
}
好的,另一个例子表明未初始化的全局变量在作为值传递给函数时起作用:(脱离大卫的评论)
int foo;
int returnit(int j)
{
cout << "your salary";
cin >> j;
return j;
}
int main()
{
int k = returnit(foo);
cout << k;
return 0;
}
无论如何,这里的教训是在传递给函数之前初始化原始数据类型。
【问题讨论】:
-
那么你认为这段代码有什么作用?除了编译错误。
-
是的,我知道它会编译错误。但是声明为全局变量而不进行初始化可以传递给函数。我试图理解为什么会这样。
-
你错了,未初始化的全局变量也不能按值传递给函数。区别只是纯粹的运气——一种碰巧起作用,一种碰巧不起作用。
-
为什么要将变量传递给该函数,而不是在函数中本地声明它?我的意思是它通过值传递,然后你在本地更改它并且永远不会返回任何东西。
-
感谢您的所有 cmets。不要将未初始化的变量传递给函数,更重要的是为什么这样做没有用。
标签: c++ variables local initialization