c++,这里面定义了全局变量i和局部变量i两个,编译时有两个i不会出错吗?

 我来答
硪丨暧恋
2017-08-12 · TA获得超过8980个赞
知道大有可为答主
回答量:5336
采纳率:93%
帮助的人:2164万
展开全部
函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量。也就是只有局部变量会起效果。在此定义域中赋值等操作时都不会使用到全局变量。
在main函数或其他函数里定义了局部变量,同时同名的全局变量同时也存在,当调用一个使用了该变量的函数(该变量在此函数中无定义)时,函数会使用全局变量。而不是main或其他函数中定义的同名变量。例如

#include <stdio.h>
#include <stdlib.h>

int n=5;
void fun(int m)
{
int n=1;
if(m<10)
{
fun(m+1);
printf("%d ",n++);
}

}<br>
void print()
{
printf("%d\n",n);
}<br><br>/*void printm()<br>{<br>  printf("%d\n",m)<br>}*/<br>
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",n);
print();
fun(n);<br> // int m=10;<br> // printm();
return 0;
}

输入3时, 运行结果为: 3 5 ,1 1 1 1 1 1 1 。(以上注释掉的部分为测试使用)

当第一次输出的时候,只是调用输出了在main()函数里边定义的n,所以当输入3时,只有main里边定义的n被改变成为3,然后下一句输出n就直接输出的是上边刚刚赋值了的3。
调用print函数时输出的结果为5,虽然print函数里只有一句printf(),看似与上边的输出语句并无其他区别,但此时print函数只能得到全局变量n,虽然在main函数里有对print()函数的调用,但是print()函数与main函数还是属于两个作用域,main中定义的局部变量n并不能影响print()函数中对n的使用,所以print函数使用的还是全局变量n。
在递归函数fun()中,每次都对声明局部变量n=1,然后每次函数发生递归的时候printf()函数中都会对n进行++操作,然而输出的全是1,这是由于当函数发生递归的时候调用自己,但是每次调用printf()函数时候,都使用的是自己的局部变量n=1,并不会受上一层n的影响也不会影响到上一层的n,更不会受全局变量n=5的影响。
我们假设当无全局变量,只有函数自己定义的局部变量的时候,函数调用printm()函数输出m,看能不能输出main中定义的m的值,结果连编译都过不了,因为对于printm()函数来说,这个m到底是个啥东西啊,查找周围并没有对m的定义,(然而并不查找到人家main函数里边去)。所以对于函数来说首先是自己定义的局部变量,其次是大家共有的全局变量。即使是递归,各自层的变量之间也不会相互影响。
追问
大神请问下,类的静态常数据成员需要在类外再定义,类的常数据成员需要吗
匿名用户
2017-08-12
展开全部
作用域范围不同,值也不相同的

~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式