c语言变量定义的位置问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 05:56:56
C语言中定义变量只能在一个函数的开始吗?
我发现在程序中定义变量,比如
void function(int n)
{
if(n%2==0)
{ int i=n/2;}
}
有时会报错,有时则不会。请问什么情况下可以在过程中定义变量呀?
还有有的时候重复定义变量,运行也是正确的,比如
void function(int n)
{
if(n%2==0)
{ int i=n/2; }
else
{ int i=(n+1)/2; }
}
这种情况下,变量的作用域是什么呀?

以花括号{}给包围起来的代码段称为block(我不知道它的准确中文翻译是不是叫模块),只要在block开始的地方定义变量就不会错,且该变量的作用域和生存期(除了static限定)只在该block里,且该变量可以屏蔽block外的变量.譬如在block外已经有一个变量名为a = 1的int变量,在block里允许定义一个同名的变量int a = 2,但在block里试着用printf打印的话,会发现printf("%d", a)结果是2.这就叫做屏蔽外面的变量!

vc++6.0编译环境中,内部变量的定义要求在函数的开始部分,即在没有赋值计算等其他语句之前定义。比如你这个:
void function(int n)
{
if(n%2==0)
{ int i=n/2; }
else
{ int i=(n+1)/2; }
}
改为:
void function(int n)
{
int i; //放到这里就可以了,它的作用域是在这个函数体里
if(n%2==0)
{ i=n/2; }
else
{ i=(n+1)/2; }
}

你在函数内定义的变量,作用域只能在当前函数内.
你下面那段代码..是个分支语句..所以不会报错,就是IF...(int)...else(int)...语法上没有错.
但是你换个写法,会看得更清楚些啊~
void function(int n)
{
int i;
if(n%2==0)
{ i=n/2; }
else
{ i=(n+1)/2; }
}

在C++中变量在使用前定义就可以,和位置没有关系
例如:你第二个例子i的使用方式

c中这么实用则不可以

还有就是在函数体内定义的变量一般时局部变量,函数结束,变量也就随着消失
了,如果在函数体内定义一个static变量,它就是全局的。

一般来说,变量的作用域是离得最近的一个