关于变量重名

学术版

ningago @ 2022-07-13 15:24:05

求教,某神的博客:

struct CP
{
  ...
}f[Maxn<<1],p[Maxn<<1];
void fft(CP *f,bool flag)
{
   ...

下面的 *f 和上面的 f[MAXN] 重复为什么不会产生歧义并正常运行?


by 小粉兔 @ 2022-07-13 15:25:09

内层(作用域)的变量会隐藏外层的变量


by mazihang2022 @ 2022-07-13 15:25:39

因为作用域不同吧


by ningago @ 2022-07-13 15:25:39

orz


by 小粉兔 @ 2022-07-13 15:25:42

使用 -Wshadow 这个编译器选项可以开启变量隐藏的警告


by NightStriker @ 2022-07-13 15:25:47

兔队楼下!


by ningago @ 2022-07-13 15:26:41

感谢


by Lehe @ 2022-07-13 15:28:46

@ljp 楼你【】下


by LX_zxy @ 2022-07-13 15:31:12

类似于就近原则。就像你在外面有一个变量x,但是如果在函数内又有一个x,函数并不会管外面的x,而是函数内的x。

#include<bits/stdc++.h>
using namespace std;
int x=0;
void find(int x){
  cout<<x<<endl;
}
int main(){
  find(1);
  return 0;
}

就像这个代码,他并不会输出0,而是输出1


by ningago @ 2022-07-13 15:32:36

@LX_zxy %%%


by __er @ 2022-07-13 15:35:34

@ningago 它是局部变量,出栈失效,你试试全局变量就会报错


| 下一页