在c语言中,变量有全局变量局部变量之分,这一点和很多高级语言类似,如c#,java等。不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的。这样的做法极不提倡,但是c语言既然允许这么做,就分析一下其变量名相同时在不同位置调用该变量名时所实际调用的是哪个变量值。

代码如下:

#include <stdio.h>

//全局变量
//作用域:从定义开始到文件结束
//默认初始值为0
int c = 1; int test()
{
int c = 2; //这个位置int c = 1; int c = 2;都起作用,
//则使用作用域最近的c = 2;
//
printf("%d\n",c);
} //当在调用变量时有多个同名变量起作用的时候
//则使用作用域离自己最近的变量
//
int main()
{
//这个位置只有你int c = 1;起作用
//
printf("%d\n",c); //局部变量
//作用域:从定义开始到函数结束
//没有默认初始值
int c = 3; //这个位置int c = 1; int c = 3;都起作用,
//则使用作用域最近的c = 3;
//
printf("%d\n",c); {
//这个位置int c = 1; int c = 3;都起作用,
//则使用作用域最近的c = 3;
//
printf("%d\n",c);
//局部变量
//作用域:从定义开始到代码块结束
//没有默认初始值
int c = 4; //这个位置int c = 1; int c = 3;int c = 4;都起作用,
//则使用作用域最近的c = 4;
//
printf("%d\n",c);
} //查看test()函数内部
//
test(); //这个位置int c = 1; int c = 3;都起作用,
//则使用作用域最近的c = 3;
//
printf("%d\n",c); return ;
}

结果:


总结:当在调用变量时有多个同名变量起作用的时候,则使用作用域离自己最近的变量

c语言全局变量与局部变量(当变量重名时)的使用情况的更多相关文章

  1. js中全局变量和局部变量以及变量声明提升

    javascript中全局变量和局部变量的区别 转载前端小99 发布于2018-04-23 15:31:35 阅读数 2102  收藏 展开 [javascript] view plain copy ...

  2. 规避Javascript多人开发函数和变量重名问题

    函数和变量重名始终是一个令人头痛的问题,先讲变量吧,相信了解JS的朋友都知道,在JS中 是没有块级作用域的只有函数作用域,也就是说那些以大括号为界定符的代码块是管不住其中定义 的变量的作用域的,举例: ...

  3. linker command failed with exit code 1 (use -v to see invocation) 变量重名

    有时候,xcode报错看不到,点最后一个按钮,类似气泡的就能看到 报错信息: duplicate symbol _imgNummmm in:    /Users/mianmian/Library/De ...

  4. 在IE中,JS方法名和input的name重名时,调用该方法无效

    在IE中,JS方法名和input的name重名时,调用该方法无效.提示:网页错误详细信息 用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1 ...

  5. c语言全局变量和局部变量问题汇总

    .局部变量是否能和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,须要使用"::" 局部变量能够与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变 ...

  6. JS的全局变量与局部变量及变量的提升

    遇到全局变量与局部变量的时候总是出一些或多或少的问题,于是专门花时间去认真研究了一下全局变量与局部变量. 这是在网上看到的一个关于全局变量与局部变量的代码,看了下作者的解析,自己也进行了研究. < ...

  7. delphi with... do和自定义变量重名

    with类中的变量和外部变量如果重名,会将外部变量覆盖,这点需要注意!!!!!

  8. javascript函数中变量重名

    <script type="text/javascript"> function fun(a){ console.log(a); // function var a=1 ...

  9. shell脚本变量定义注意别跟系统变量重名了……

    写了个很简单的脚本,执行结果却很奇怪.   1 #!/bin/bash PATH=$HOME/vlc_transplant4 rm -f $PATH/vlc ln -s $PATH/bin/vlc-s ...

随机推荐

  1. 多控制器之UIApplication

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. MarkdownPad2

    http://markdownpad.com/ MarkdownPad2

  3. 浏览器兼容性的css hack 写法

    IE各版本浏览器之间的识别概括如下: IE6:能识别 * .\9 和 _ ,不能识别 !important IE7:能识别 * .\9 和 !important,不能识别 _ IE8:能识别 \9 和 ...

  4. mysql 一个较特殊的问题:You can't specify target table for update in FROM clause

    mysql 一个较特殊的问题:You can't specify target table for update in FROM clause 即:不能先select出同一表中的某些值,再update ...

  5. Configuring Active Directory Federation Services 2.0 (配置 adfs 2.0) -摘自网络

    Active Directory Federation Services (AD FS) 2.0 makes it possible to deploy a federation server and ...

  6. openStack 使用public key登陆

  7. jquery实现公告上下滚动显示

    js: // JavaScript Documentfunction b(){ t = parseInt(x.css('top')); y.css('top','19px'); x.animate({ ...

  8. apache安装php7过程中遇到到段错误

    1.假如apache的配置文件httpd.conf同时加载libphp5.so和libphp7.so 2.如图所示,modules下同时存在libphp5.so/libphp7.so 3.启动apac ...

  9. vbs运行批处理

    dim wshellset wshell=createobject("wscript.shell") wshell.run "cmd /c sc query Spoole ...

  10. js split str.split(&quot; &quot;); split使用方法 在某处截字符串

    <script language="javascript">    str="2,2,3,5,6,6"; //这是一字符串var strs= new ...