假设我在一个函数中声明一个变量,如下所示:
void i() {
int c;
}
我怎样才能在不同的功能中执行此操作?
void j() {
cout << c << endl;
}
答案 0 :(得分:2)
让我们从基础开始:
在C ++中,变量的默认存储类是auto。
这意味着在块中声明的变量只有在声明它们之后才能在该块中可用。
一个块用花括号(循环,if语句,函数等)标记
void i() {
//c is not declared here and is unavailable
int c;
//c is available
for(int i=0; i<2; i++)
{
//c is also available here, because it is declared in larger scope
}
}
//c is not recognized here because it is declared only inside the scope of i()
void j()
{
int c; //this is variable c. it has nothing to do with the c that is declared in i()
for(int i=0; i<2; i++)
{
int d; //this variable gets created and destroyed every iteration
}
//d is not available here.
}
默认情况下,在函数体内声明的变量将仅在声明点之后存在于该函数范围内。
在你的问题中,你没有描述你希望两个函数如何通信,因此很难指出一个合适的方法。
如果要在函数之间传递相同的值,则应该读入参数传递和函数返回值。还有另一种方法是全局变量,除非绝对需要,否则不推荐,但绝对需要学习。
答案 1 :(得分:1)
void j(const int c)
{
std::cout << c << std::endl;
}
然后使用以下命令从您的函数中调用它:
j(c);
答案 2 :(得分:1)
最佳方法取决于您对c
的实际操作。也就是说,如果c
不是i()
调用所独有的,那么您可以使用全局变量来访问它:
int c;
void i(){
c = c++; //uses c, pun intended
}
void j(){
cout << c << endl;
c++; //can change c
}
如果每次调用c
时都使用唯一i()
,那么您可以在i()
中对其进行定义,并且必须从{{1}内将其传递给j()
}},否则i()
不知道j()
的位置:
c
请注意,void i(){
int c;
j(c);
}
void j(int c){
cout << c << endl;
c++; //cannot change c in i()
}
中的c
以及i()
中的c
不是同一个变量。如果您在j()
中更改c
,则j()
中的i()
将不会更改,与全局方法相同。
如果希望变量对于i()
是唯一的,但j()
可以访问,则可以通过指针(未显示)或refence(如下所示)传递变量:
void i(){
int c=0;
j(c);
}
void j(int &c){
cout << c << endl;
c++; //can change c in i()
}
注意:这里的术语相当随意,我甚至没有使用您可能想要了解更多信息的scope这个词。
答案 3 :(得分:-2)
变量c
在调用j
的上下文中不存在,因此您必须将其作为全局变量或返回值传递。
int i(){
int c = 2;
return c;
}
int i()
将返回c
,可以将其传递给其他构造函数。
void j(const int c){
std::cout << c << std::endl;
}
或者更确切地说,在i
内调用j
。
void j(){
int cr = i();
std::cout << cr << std::endl
}