全局变量和局部变量同名

来源:互联网 发布:杀不死 知乎 编辑:程序博客网 时间:2024/06/05 20:46

#include<stdio.h>
#include<stdlib.h>
int x=1;
 
int main()
{ void a(void);
  void b(void);
  void c(void);
  printf("变量x的地址:%d\n",&x);
  int x=3; //这里的x是重新定义的,所以他跟前面的全局变量是不一样的
  printf("变量x的地址:%d\n",&x);
 
  a();
  b();
  c();
  system("pause");
  return 0; 
}

void a(void)
{
 int x=25; //这里的x是重新定义的,所以他跟前面的全局变量是不一样的
 printf("x in a is:%d\n",x);
 printf("变量x的地址:%d\n",&x);
 ++x;
 printf("++x in c is:%d\n",x);
 printf("变量x的地址:%d\n",&x);       
}

void b(void)
{
 static int x=50;//这里的x是重新定义的,所以他跟前面的全局变量是不一样的
 printf("x in b is:%d\n",x);
 printf("变量x的地址:%d\n",&x);
 ++x;
 printf("++x in b is:%d\n",x);
 printf("变量x的地址:%d\n",&x);       

void c(void)
{//变量必须先定义后使用,这个函数中没有定义变量x。既然这里没有定义,那么能用,
//就表明他是一个全局变量,这时就去程序开头看。想外部变量,一般都会加exter 
 printf("gloable x in c is:%d\n",x);
 printf("变量x的地址:%d\n",&x);
 ++x;//这里的地址是全局变量是因为他只在一个地方定义了,及全局变量的地方定义了。
 printf("gloable ++x in c is:%d\n",x);
 printf("变量x的地址:%d\n",&x);  
}


//如果在函数后面定义全局变量,而前面的函数需要用到该全局变量,则需要在函数内部对引用的全局变量进行说明:
// extern 类型说明符 全局变量名
//在函数内部使用extern说明变量时,编译器并不会为变量分配内存单元。
//该语句只是告诉编译器,在函数中使用该变量是在外部定义的全局变量。

 

一个全局变量的定义在一个程序中只能出现一次,而在函数中说明对全局变量的引用可出现多次。

 

全局变量和局部变量同名(写个测试程序):

正常情况下,全局变量可以在程序各函数中使用。如果某个函数和复合语句中定义了与全局变量名称相同的局部变量,

则在该函数或者复合语句中该同名的全局变量将不起作用。退出函数后,仍然可正常访问全局变量中的值。并且,同

名的全局变量和局部变量的值互不干扰。

全局变量也称为外部变量。