C语言,关于局部变量重名的问题。

main()
{ int x=1;
void prt(void);
int x=3;
prt();
printf(“2nd x=%d\n”,x);
printf(“1st x=%d\n”,x);
}
void prt(void)
{ intx=5;
printf(“3th x=%d\n”,x);
}
这样编译,提示x重复定义

main()
{ int x=1;
void prt(void);
{ int x=3;
prt();
printf(“2nd x=%d\n”,x);
}
printf(“1st x=%d\n”,x);
}
void prt(void)
{ intx=5;
printf(“3th x=%d\n”,x);
}
这样编译,会输出5 3 1

我想问下,局部变量什么时候可以重名?

第1个回答  推荐于2016-06-09
对于这道题你可以由外向内这样分。

单个文件中分为3个级别的空间:
函数外一个空间:全局变量,具有静态存储,从定义出到这个文件结尾范围的函数可以使用
函数内:自动变量,离开函数就释放
复合体(大括号内):自动变量,离开大括号就自动释放

说明:大致上就是这3部分,内和外有同名的,内将屏蔽外部变量。但是在同一级上的同名将导致出现多次定义的错误

多个文件涉及:只能有一个定义的外部链接

(c++的话还有类和名称空间)
你的第一个例子2个x的定义都是在main函数内的同一级上,重复定义。
第二个例子int x=3只能在大括号中生存,而且屏蔽了x=1的那个定义。本回答被提问者采纳
第2个回答  2015-03-31
void prt(void);
{ int x=3;
prt();
printf(“2nd x=%d\n”,x);
}
printf(“1st x=%d\n”,x);
}
亲您好~这个void prt(void)下面又一对大括号~
这个就告诉了编译器,我这一块属于局部的形式~里面的参数不影响外面程序的运行~
望采纳追问

其实两个x都是局部变量。不写花括号为什么不可以呢?什么情况下局部变量可以重名呢?

追答

这个括号代表的是在mian函数里面的局部块~而不是作为全局的局部块~

相似回答