全局变量

·定义在函数外面的变量是全局变量

·全局变量具有全局的生存期和作用域

  ·它们与任何函数都无关

  ·在任何函数内部都可以使用它们

全局变量初始化

·没有做初始化的全局变量会得到0值

  ·指针会得到NULL值

·只能用编译时刻已知的值来初始化全局变量

·它们的初始化发生在main函数之前

被隐藏的全局变量

·如果函数内部存在与全局变量同名的变量,则全局变量被隐藏

静态本地变量-1

·在本地变量定义是加上static修饰符就成为静态本地变量

·当函数离开的时候,静态本地变量会继续存在并保持其值

·静态本地变量的初始化只会在第一次进入这个函数做,以后进入函数时会保持上次离开时的值

静态本地变量-2

·静态本地变量实际上是特殊的全局变量

·它们位于相同的内存区域

·静态本地变量具有全局的生存期,函数内的局部作用域

*返回指针的函数

·返回本地变量的地址是危险的(每次离开后,本地变量分配的内存被释放,下次重新进入某函数时,又重新分配内存给本地变量)

·返回全局变量或静态本地变量的地址是安全的

·返回在函数内malloc的内存是安全的,但是容易造成问题

·以上的方法都不建议,最好的做法就是返回传入的指针

tips

·不要使用全局变量来在函数间传递参数和结果

·尽量避免使用全局变量

  ·丰田汽车的案子

· *使用全局变量和静态本地变量的函数是线程不安全的

C语言进阶——全局变量的更多相关文章

  1. C语言:全局变量在多个c文件中公用的方法 [转]

    用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用. 举例说明:项目文件夹project下有main. ...

  2. 【R笔记】R语言进阶之4:数据整形(reshape)

    R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...

  3. 《C语言进阶剖析》课程目录

    <C语言进阶剖析>学习笔记                                                         本文总结自狄泰软件学院唐佐林老师的<C语言 ...

  4. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  5. R语言进阶

    一.初学入门:<R in Action><The Art of_R Programming>入门者可首选两本,前者从统计角度入手,分高中低三部分由浅入深的讲解了如何用R来实现统 ...

  6. 用汇编语言研究C语言的全局变量、局部变量、参数、返回值放在哪里

    前提知识 c0s调用main函数的地址: 11ah main函数的连接地址: 01fah 一.全局变量与局部变量 测试程序 int a1,a2,a3; void f(void); void g(voi ...

  7. 苹果新的编程语言 Swift 语言进阶(八)--属性

    属性是特定类.结构或枚举的相关值,属性根据作用域不同分为实例属性与类型属性,还可以根据是否存储分为存储属性和计算属性. 1.1 实例属性 为一个类.结构或枚举定义的属性默认属于实例属性,即该属性属于为 ...

  8. C语言进阶——Day 1

    C语言提高笔记 Day 1 小数据赋给大变量,首位是1则在前面自动补充1,首位是0则在前方自动补充0. 大数据赋给小变量,低位字节对齐,truncate截断,有可能会造成数据丢失. 程序和进程的差别: ...

  9. [C语言]进阶|程序结构

    ------------------------------------------------------------------------------------ 全局变量: // main.c ...

随机推荐

  1. 【43.49%】【hdu3308】LCIS

    Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  2. Linux 内核块 urb

    块 urb 被初始化非常象中断 urb. 做这个的函数是 usb_fill_bulk_urb, 它看来如此: void usb_fill_bulk_urb(struct urb *urb, struc ...

  3. Next.js 笔记

    NEXT 中文文档地址! next.js 只有服务端使用的包需要做单独处理,无需打包到项目中,可以使用@zeit/next-bundle-analyzer观察代码. Router.beforePopS ...

  4. HDU - 3671 Boonie and Clyde (图的割点)

    As two icons of the Great Depression, Bonnie and Clyde represent the ultimate criminal couple. Stori ...

  5. 微信群打卡机器人XiaoV项目开源 | 蔡培培的独立博客

    原文首发于蔡培培的独立博客.原文链接<微信群打卡机器人XiaoV项目开源>. 5月21日,在米花(后面" 亚里士多德式友谊"专题会提及)的影响下,决定搞个私人运动群,拉 ...

  6. 【python安装】错误——“User installations are disabled via policy on the machine”

    报错界面: 解决方法一:  1.在运行里输入gpedit.msc;  2.计算机配置管理>>管理模板>>windows组件>>windows Installer&g ...

  7. 21.time和random

    原文:https://www.cnblogs.com/yuanchenqi/article/5732581.html time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳 ...

  8. pycharm 设置代码折叠和展开(mac)

    折叠/展开 pycharm设置 点击PyCharm--->Preferences--->Editor--->General--->Code Folding,勾选Show cod ...

  9. Ubuntu 18.04 64位安装tensorflow-gpu

    第一步(可直接跳到第二步):安装nvidia显卡驱动 linux用户可以通过官方ppa解决安装GPU驱动的问题.使用如下命令添加Graphic Drivers PPA: 1 sudo add-apt- ...

  10. Java容器知识总结

    剖析面试最常见问题之Java集合框架 说说List,Set,Map三者的区别? List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一 ...