全局变量和实参重名调两次
时间: 2024-08-12 12:08:46 浏览: 30
全局变量和局部变量重名时,当在同一作用域内发生调用时,通常会优先使用局部变量的值。这是因为函数内部的局部变量具有更高的优先级,它们的作用范围仅限于函数内部。
全局变量(global variable)是在程序的整个执行期间都存在的变量,无论在哪里定义,都可以在程序的任何地方被访问。如果你在函数中也声明了一个同名的局部变量,当你在该函数内部访问这个变量时,你会使用局部变量的值,除非你在函数内部明确指定了使用全局变量。
例如:
```cpp
int globalVar = 10; // 全局变量
void func() {
int localVar = 20; // 局部变量,与全局变量同名
// 在函数内部,使用的是局部变量localVar的值
std::cout << localVar; // 输出20
}
func();
std::cout << globalVar; // 输出10,因为全局变量没有在函数内被覆盖
```
如果你在函数内部需要访问全局变量,必须使用 `globalVar` 这个关键字,或者使用 `::` 操作符来明确指定:
```cpp
std::cout << ::globalVar; // 使用全局变量
```
相关问题
c 语言形参与实参重名
在C语言中,形参和实参可以重名。当函数被调用时,实参的值会被传递给形参,形参会在函数内部被当做变量来使用。如果形参和实参重名,那么在函数内部使用该变量时,会优先使用形参的值。例如:
```c
#include <stdio.h>
void func(int num) {
printf("形参num的值为:%d\n", num);
}
int main() {
int num = 10;
func(num); // 调用函数
return 0;
}
```
在上面的例子中,函数`func`的形参为`num`,在`main`函数中定义了一个变量`num`并将其值赋为10,然后调用`func`函数并将`num`作为实参传递给`func`函数。在`func`函数内部,使用`num`变量时会优先使用形参`num`的值,因此输出结果为“形参num的值为:10”。
Python中布尔变量意外实参是怎么回事
Python中布尔变量通常用于逻辑运算,它们只有两个可能的值:True和False。当提到"布尔变量作为实参"时,这通常是关于函数调用时,传递给函数的参数可能是布尔类型的。
例如,如果你定义了一个函数`check_status(status: bool)`,它期望一个布尔值来决定执行某些操作。如果错误地传递了一个非布尔类型的变量(如整数、字符串或其他数据类型),Python会尝试将其转换成布尔值。根据Python的内置规则:
- 整数值0会被视为False,非零值被视为True。
- 字符串中的空字符串''也被视为False,其他非空字符串被视为True。
- 对于其他非布尔类型的数据(如列表、元组、对象等),Python会抛出TypeError异常,除非该类型有明确的方法实现转化为布尔值(如None在Python中默认为False)。
例如:
```python
def check_status(status):
if status:
print("Status is True")
else:
print("Status is False")
# 错误示例:
check_status(1) # TypeError: check_status() takes exactly one argument (0 given)
check_status("") # ValueError: The truth value of an empty string is ambiguous. Use a non-empty string instead.
```
在上述例子中,`check_status(1)`抛出TypeError,因为1不是布尔值,而`check_status("")`抛出ValueError,因为空字符串不能直接当作布尔值。