功能原型变量范围C
function prototype variable scope C++
是函数原型声明中的变量C 在范围中被认为是全局吗?
例如。在下面的脚本中,我们声明了readArray
的功能原型,该函数原型将数组integerArray
和Integer maxNumElements
作为输入,并返回用户提供的元素数量。当然,readArray
函数从MAIN调用。我的问题是displayArray
是否可以通过提供用户插入的最大元素来打印readArray
中编辑的数组。简而言之,integerArray
和numElements
Global?
/* prototype declaration*/
int readArray (int integerArray [], int maxNumElements);
void displayArray(int integerArray[], int numElements);
int main()
{
int inputValues[128]; /*the array to be read*/
int numberOfValues = readArray(inputValues, 128);
displayArray(inputValues, numberOfValues);
return 0;
}
int readArray(int integerArray[], int maxNumElements)
{
int numberOfValues;
for (numberOfValues = 0; numberOfValues < maxNumElements; numberOfValues++)
{ /*take integers as input from user and insert into array */
/*return the number of elements the user as provided*/
}
return numberOfValues;
}
void displayArray(int integerArray[], int numElements)
{ /*print the array*/
for (int = 0; i < numElements; i++)
{
cout << i << ":" << integerArray[i] << endl;
}
cout << endl;
}
范围是关于可见名称的位置。例如,从声明的角度到宣布其宣布的翻译单元的末尾,可以看到全球范围中的名称;从其声明点到声明其声明的块末尾(即,直到关闭}
(,可以看到本地范围中的名称。函数原型中的参数名称仅在原型中可见。在该函数中可见传递给函数的参数的名称。
所以,从您的代码中:
int readArray(int integerArray[], int maxNumElements);
名称integerArray
和maxNumElements
在此原型外面不可见。
int readArray(int integerArray[], int maxNumElements) {
// ...
}
名称 integerArray
和 maxNumElements
虽然是函数定义,但在其外部不可见。
int displayArray(int intgerArray[], int numElements) {
// ...
}
名称 integerArray
和 numElements
虽然是函数定义,但在其外部不可见。
名称integerArray
的三种用途彼此没有连接;好像他们每个人都是一个完全不同的名称。
我认为将函数参数作为变量没有意义。它们基本上是您调用功能将提供给该功能的数据的占位符。
因此,在您的示例中,您没有在integerArray
上操作,而是在int inputValues[128]
指向的数据上操作,您在main()
中声明。inputValue
是变量,而不是integerArray
。
在您的情况下,您碰巧正在执行所谓的逐回电。IE。您的功能原型正在接收到整数的指针。当您将指针inputValues
传递给ReadArray时:
int numberOfValues = readArray(inputValues, 128);
然后,您将其授予地址inputValues
。然后,readValues
将在inputValues
指向的存储区域上操作。
因此,displayArray
将在您的示例中显示由readArray
编辑的数据。
请注意,这是您进行逐个呼叫的结果,而不是在全局范围中函数参数。
如果您的原型看起来像这样:
int readArray (vector<int> integerArray);
void displayArray(vector<int> integerArray);
然后,displayArray
在任何意义上都不会打印integerArray
的内容。当您致电readArray
时,您将进行呼叫副词:它将获得inputValues
的副本(在这种情况下,它将被称为vector<int> inputValues
(,当函数调用返回时,您将留下inputValues
的原始值,并且在这种特殊情况下,displayArray
将打印一个空的向量。
不,它们不是全局。函数在接收参数时创建本地副本。您可以通过在复制构造函数中使用COUT创建自己的课程来在C 中验证这一点。将该类的对象传递到函数(按值(,您将看到复制构造函数被调用。在C 中,更好的方法是使用STD :: Array和STD :: vector。同样,按价值传递并不是非重要类型和巨大数据块的明智想法。始终通过"地址"(指示(或"参考"传递参数(您可能需要阅读有关std :: Ref(
- 尝试通过多个向量访问变量时,向量下标超出范围
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 如果非动态变量被指针引用,何时超出范围?
- 为什么我的变量存在于其范围之外
- 变量超出范围后如何保留向量值?
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在 c++ 中确定堆栈上的变量范围
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何从未知视图中声明范围::v3::View 变量
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 是否未定义将对函数范围变量的引用作为值返回
- 无法从另一个函数访问文件范围变量的内容
- 如何访问C 中的功能范围变量
- C++ 程序和范围变量
- 性能对象属性与范围变量
- 存储lambda函数,该函数将范围变量捕获为类成员以供重用
- 何时分配块范围变量
- 在 c++ 中声明一个全局范围变量 const