在c语言中全局变量i和局部变量i有相互影响吗?

作者&投稿:明怪 (若有异议请与网页底部的电邮联系)
c语言全局变量和局部变量的问题~

解答问题前,先说明一下,当全局变量和局部变量同名时,要看当前代码所处的作用域,默认使用当前作用域内的同名局部变量。
分析你所提供的代码:
#include int a = 4;//全局变量int f(int n){int t = 0;static int a = 5;//局部静态变量if( n%2 ){int a = 6;// if作用域内局部变量t += a++;// 此处的a是指if作用域内的局部变量,该变量在作用 // 域结束后,生存周期结束。}else{int a = 7; // else作用域内局部变量t += a++;// 此处的a是指else作用域内的局部变量 // 作用域结束后,生存周期结束}return t+a++;// 此外的a是指f函数作用域内的静态局部变量, // 每次f函数调用return后,此静态局部变量a自增1}int main ( void ){int s=a, i=0;// 根据作用域,此处的a是指全局变量,所以s初始值为4for(;i<2;i++) s+=f(i);printf("%d
",s);return 0;}根据以上,分析运行流程:
由上可知,s初始值为4;
当i=0时,第一次循环,调用f()函数,由于0%2为0,会进入else后代码,此时t=0+7=7,调用f()函数的return时,会返回7+5=12,同时f()函数的静态局部变量a由5变为6(下次调用生效),s=4+12=16。
当i=1时,第二次循环,调用f()函数,由于1%2为1,会进入if后代码,此时t=0+6=6,调用f()函数的return时,会返回6+6=12,同时f()函数的静态局部变量a由6变为7(下次调用生效),s=16+12=28。
当i=2时,循环终止,打印s值为28。

关于最后的问题,是因为f()函数中if后面的变量a作用域只限制在if后的花括号内,代码退出该作用域后,该变量生存周期结束而被释放,return中使用的a是f()函数中定义的静态局部变量a,所以,不管前者如何赋值,对return中的a没有影响。

放在main函数里定义的变量是局部变量,全局变量要放在所有函数(包括main)的外部#include int x,y,z;
void year(int a,int b,int c);
int main()
{
int i,a,b,c;
for(i=1;i<=1;i++)
{
scanf("%d,%d,%d",&a,&b,&c);
printf("a=%d
",a);
printf("b=%d
",b);
printf("c=%d
",c);}这里x y z就是全局变量,其他都是局部变量

扩展资料:
for循环
for循环结构是c语言中最具有特色的循环语句,使用最为灵活方便,它的一般形式为:
for(表达式1;表达式2;表达式3)循环体语句 。(其中;不能省略)
表达式1为初值表达式,用于在循环开始前为循环变量赋初值。
表达式2是循环控制逻辑表达式,它控制循环执行的条件,决定循环的次数。
表达式3为循环控制变量修改表达式,它使for循环趋向结束。
循环体语句是在循环控制条件成立的情况下被反复执行的语句。
但是在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次,也可能一次也不计算。循环体可能多次执行,也可能一次都不执行。
先执行表达式2,然后执行循环结构,最后表达式3,一直这样循环下去。
for循环语句是c语言种功能最为强大的语句,甚至在一定程度上可以代替其他的循环语句。
do
do循环结构,do 1 while⑵;的执行顺序是1->2->1...循环,2为循环条件。
参考资料来源:百度百科-C语言

没有影响。在局部变量i的作用域内,取值和赋值都是针对局部变量i的,不会影响全局变量i。

在局部变量i作用域之外,取值和赋值都是针对全局变量i的,不会影响局部变量i。


局部变量的作用域为,从定义该局部变量的位置开始,到定义该变量语句所在的{}对结束。

比如如下函数:

void func()//1
{//2
    int a = 1;//3
    expr1; //4
    if(expr2)//5
    {//6
        int b=1;//7
        expr3;//8
        int c = 2; //9
        expr4;//10
    }//11
}//12

该代码共有12行,其中:

a定义于第3行,所在{}对为2-12行,其作用域就是从3行到12行。

b定义于第7行,所在{}对为6-11行,其作用域就是从7-11行。

c定义于第9行,所在{}对为6-11行,其作用域就是从9-11行。



#define int i;
这种方式是不可以的,define后面接的第一个单词是宏名,和变量名一样,不能使用关键字
剩下的可以执行
对于全局和局部变量同名,涉及到作用域的问题
在这个函数中,因为有局部变量int i,那么在main中 全局变量int i等于无效
可以做这样的一个程序加深理解

int i = 3;
void main()
{
printf("%d\n", i);
{
int i = 4;
printf("%d\n", i);
}
printf("%d\n", i);

}
会打印出
3
4
3

1,声明于内层代码块的标识符的作用域到达该代码块尾部便终止。
即,main中声明的i只在main函数内部有效。

2,如果内层代码有一个标识符与外层代码块的一个标识符相同,则内层的标识符会将外层的
标识符隐藏———外层标识符无法在内层代码块中通过名字访问。
即,main中的i与全局变量i不是同一个东西,虽然名字相同。在main中改变i的值,全局变量i不会改变。实质上他们是不同的变量。

你的代码在VC6.0是无法通过的,宏定义应该是不能使用关键字的吧。
至少我这无法通过。

局部变量和全局变量在程序中是可以共存的。在函数或过程中,如果有局部变量i,则局部变量起作用。

没有影响
局部变量和全局变量重名时,局部变量自动覆盖全局变量,也就是此时访问到的是局部变量,不会对全局变量造成更改
但不建议这样编写程序,编译器一般也会给出警告


C语言函数问题:请问这个程序的输出答案是什么,需要解释为什么答案是这 ...
1.静态局部变量在程序编译时被首次初始化,即以后的函数调用不再进行初始化,而是使用上次调用结束时的值。静态量数据有单独的存储区。2.全局变量在整个函数有效,但是当某个局部变量与全局变量同名时,在该局部变量所在域内,只有该局部变量有效,与其同名的全局变量无效。在所述程序中,全局变量i在for的...

C语言的全局变量是什么意思?
静态全局变量当定义在函数内的全局变量,有static标记时,默认初始化为0值;非静态全局变量没有默认初始值,C语言规定初始化值为随机值,但具体的实现由编译器决定。C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在...

C语言怎么定义全局变量
1 2 3 4 5 6 7 8 9 10 11 int f = 7\/\/ 这个是全局变量 int myadd(int a, int b){ int c = a + b\/\/ c是局部变量,只能在myadd中使用 return c } int main(void){ printf("%dn", c)\/\/ 因为c是myadd中定义的局部变量,这里会报错。printf("%dn",...

C语言公用变量这么声明?还有int i=0是什么意思
全局变量在函数外声明,如#include <stdio.h>int i=0;\/\/全局变量int main (){\/\/函数内容}int i=0;是int i;i=0;的简写,表示对整型变量i进行声明,然后给i赋初值0;

C语言中,全局变量和外部变量有什么区别?
全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。 有时需要在其他文件中使用extern...

c语言中局部变量和全局变量的区别是什么
全局变量:在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件.总之,全局变量可以使用,但是全局变量使用时应注意的是尽可能使其名字易于理解,而且不能太短,避免名字空间的污染;避免使用巨大对象的全局变量。局部变量:在...

c语言改变全局变量
} 或者把函数的定义放在前面也能充当声明:include "stdio.h"int i = 0;void add(void) \/\/放前面{ i += 1;}void add_2(void){ i = 1;}int main(void){ printf("%d",i); add(); \/\/函数定义放前面就不用声明了 printf("%d",i); add_2(); printf("%d",i);} ...

c语言中的if问题?
变量有全局变量和局部变量之分,这里面int i=0得到的i是全局变量,而if语句中的int i=3得到的i是局部变量。最后在if语句外打印的应该是全局i,打印出来的结果自然是0了 望采纳,感谢

c语言全局变量可声明什么?
static的作用是将全局变量的作用域限制在从定义开始到当前文件结尾,且其他文件不可以用extern来让这个变量可见。extern的作用是声明一个已经在别处定义了的全局变量,它不是重新定义新的全局变量,而是起到扩展全局变量作用域的作用。a.c:int i; \/\/定义i变量,且可用extern去扩展它的范围 static int j...

C语言中关于局部变量和全局变量的问题
应该是28吧,我没有在用真机测试,口算的,过程如下:1、s = 2;此时用的是第二行的a=2 2、i=0时,f(i)的运行是第七行,t+=a++d的运算是t=4,a++为第七行的a加1,a由4变为5;然后到第九行t+a++,此时t=4,这行的a用的是第五行的a=3,所以,此时t+a++的运行为4+3=7,...

朗县17151413238: c语言中 全局变量与局部变量在内存中的区别 -
剧例麦味: 全局变量是使用相同的内存块在整个类中存储一个值. 全局变量的存在主要有以下一些原因: 1,使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不成为什么问题,除非使用的是巨大对象的全局变量,...

朗县17151413238: c语言有全局变量和局部变量之分吗
剧例麦味: 有: 比如: #include <stdio.h> int i = 0 ; //全局变量 ……………… void main() {int b = 0; //局部变量 }

朗县17151413238: c语言 局部变量和全局变量的区别 -
剧例麦味: 1)局部变量只在本函数范围有效,在此函数以外是不能使用这些变量;全局变量的有效范围是从定义变量的位置开始到本源文件结束. 2)局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量是程序运行时事先分配内存空间,当程序结束时释放内存.

朗县17151413238: C语言 全局变量与局部变量 -
剧例麦味: 全局变量是在函数体外定义或声明的变量,可以被所有函数使用 局部变量是在函数体内部定义的变量,只能本函数使用,别的函数使用不了.

朗县17151413238: 在C语言中,局部变量和整体变量的区别 -
剧例麦味: 局部变量的作用域仅为离他最近的大括号内,超出这个范围无效!全局变量在整个文件中都有效!但是如果局部变量若与全局变量有重复,在局部变量作用域内以局部变量为准!局部变量在作用域大括号结束后便释放存储空间,全局变量随整个程序的消亡而释放存储空间! 在你这个程序中首先运行了sub1,便更改了a[10]的值为0 2 4 6 8 10 12 14 16 18;而sub2中因为a[MAX] 为局部变量在执行完sub2后便释放了存储空间,不会对全局变量a[10]的值产生影响,因此运行sub2();sub3(a);显示结果为0 2 4 6 8 10 12 14 16 18

朗县17151413238: C语言小题目,最终i,j的值分别是多少啊? -
剧例麦味: 答案是:i==10 ,j==11、fun1函数中i是静态局部变量,静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见.所以i就相当于执行了10次i++.2、fun2函数中j是静态全局变量,静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域.这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量.每次执行函数fun2就把j赋值为0,

朗县17151413238: c语言:全局变量和局部变量的区别:通过调用函数举例 -
剧例麦味: #include int test_1 = 0; int fun1() {return test_1++; } int fun2() {int test_2 = 0;return test_2++; } int main() {int i = 0;for(i=0;i<10;i++)printf("%d %d\n",fun1(),fun2()); } 全局变量全局生效,程序结束时销毁. 局部变量退出函数时销毁.

朗县17151413238: c语言什么是局部变量,全局变量,动态变量,静态变量. -
剧例麦味: 以int a为例 如果int a定义在函数外,(包括main函数)那么它就是全局变量,在函数内的就是局部变量. 而定义的时候加了static修饰的就是静态变量,没加static的就是动态变量

朗县17151413238: 什么是局部变量 -
剧例麦味: C语言全局变量和局部变量 引子--- ? ?? ???变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数外部.根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量.从空间角度来看,变量可以分为全局变...

朗县17151413238: 什么叫局部变量和全局变量?请用例子解释. -
剧例麦味: 例如如下的 C 语言源程序: int i ; void mysub( ) ; void main( ) { int j = 5 ; i = 50 ;mysub( j ) ;printf("i = %d\t%d\n", i , j ) ;}void mysub( int j ) { i += 80 ; j += 100 ;} 定义在主函数 main( ) 之外的变量 i 就是全局变量,它在 main( ) 函数中的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网