首页 > 其他分享 >C语言学习随笔-11 作用域

C语言学习随笔-11 作用域

时间:2024-01-16 16:45:41浏览次数:20  
标签:11 初始化 函数 作用域 局部变量 C语言 int printf 全局变量

 作用域:作用域是程序中定义的变量所存放的区域,超过该区域就不能被访问
 C语言中有三个地方可以声明变量:
 -  在函数或块内部的局部变量。
 -  在所有函数外部的全局变量。
 -  在形式参数的函数参数定义中。

1、局部变量

int main局部变量() 
{
    /*
        1、局部变量
        - 在某个函数块的内部声明的变量为局部变量。
        - 它们只能被该函数或该代码块内部的语句使用。
        - 局部变量在函数外部是不可知的
    */

    //局部变量声明
    int a, b;
    int c;

    //实际初始化
    a = 10;
    b = 20;
    c = a + b;

    printf("value of a = %d,b = %d and c = %d\n",a,b,c);

    return 0;
}

2、全局变量
      - 全局变量通常定义在函数外部,通常是在程序的顶部。
      - 全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。
      - 全局变量可以被任何函数访问

int g;
int d = 10;
int main全局变量() 
{
    //局部变量声明
    int a, b;

    //实际初始化
    a = 10;
    b = 20;
    //g = a + b;

    //在程序中,局部变量和全局变量的名称可以相同,但在函数内,如果两个名字相同,会使用局部变量的值,全局变量的值不会使用
    int d = 20;

    printf("d = %d\n",d);

    //printf("a = %d,b = %d,g = %d",a,b,g);

    return 0;
}

3、形式参数

     函数的参数,形式参数,被当作该函数的局部变量,如果与全局变量同名,它们会优先使用

//全局变量声明
int a = 50;

//添加两个整数的函数
int sum(int a, int b) 
{
    printf("value of a in sum() = %d\n",a);
    printf("value of b in sum() = %d\n",b);

    return a + b;
}

int main() 
{
  //局部变量声明
    int a = 10;
    int b = 20;
    int c = 0;
    //int sum(int,int);

    printf("value of a in main() = %d\n",a);
    c = sum(a, b);
    printf("value of c in main() = %d\n",c);

    return 0;
}

4、全局变量与局部变量在内存中的区别

      - 全局变量保存在全局存储区中,占用静态的存储单元;
      - 局部变量保存在栈中,只有在所在函数被调用时才动态的为变量分配存储单元

      初始化局部变量和全局变量
      当局部变量被定义时,系统不会对其初始化,必须自行对其初始化。定义全局变量时,系统会自动对其初始化

 int = 0;
 cahr = '\0';
 float = 0;
 double = 0;
 pointer = NULL;

 

标签:11,初始化,函数,作用域,局部变量,C语言,int,printf,全局变量
From: https://www.cnblogs.com/Jx153875/p/17967990

相关文章

  • Linux7安装 Oracle 11g Error in invoking target 'agent nmhs' of makefile
    目录1现象2解决3附录1现象%86时出现报错Errorininvokingtarget'agentnmhs'ofmakefile2解决在makefile中添加链接libnnz11库的参数修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMAGENT_NMECTL)修改为:$(MK_EMAGENT_NMECTL)-lnnz11建议修改前备份原始......
  • C语言——函数指针类型转换
    昨天为了避免跨层调用API搞了个回调函数,用了函数指针,因为参数类型的问题总是编译报错,今天就看了两篇博文学习学习,顺便做做笔记。其实正常来讲只要把函数指针的参数个数、类型和返回值这些函数指针的标签或者说是属性写对了的话就不会有社么问题,但我也不知道怎么着就会报......
  • 20240116打卡
    今天对servlet规范进行了学习,主要参考了实现Servlet服务器-廖雪峰的官方网站(liaoxuefeng.com),有了一个相对全面的认识,自己之前学的代码还是很不规范的,虽然能跑,但实际上没有条理框架,不方便自己和他人阅读和修改。与此同时,我对项目的搭建流程进行了一次思维上的梳理,尝试理清更......
  • 算法模板 v1.2.1.20240116
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • FX110网:钱是拿不回来了!AUGS Markets平台早已关网停业
    如果还有投资者有在AUGSMarkets平台出金未到账的,只怕是永远也不会到账了,因为该平台早已停业,网站也已无法打开。近期,一汇友向我站投诉,称其一年多前在AUGSMarkets平台的出金申请当时就已通过,可至今还有部分资金未到账。因为等待时间太久,汇友早已对出金不抱什么希望了,但还是心有不......
  • C语言入门-printf库函数
    printf()库函数调用格式:printf("<格式化字符串>",<参量表>);声明intprintf(constchar*format,...)参数格式字符意义a,A以十六进制形式输出浮点数(C99新增)。实例printf("pi=%a\n",3.14);输出pi=0x1.91eb86p+1。d以十进制形式输出带符号整数(正数不......
  • Windows 11 锁屏壁纸问题
    1、打开MicrosoftStore搜索"动态主题"2、安装动态主题并打开3、锁屏并查看效果 ......
  • 解决Windows11电脑微信语音通话麦克风自动调节话筒输入音量大小问题
    1、打开【声音设置】-【更多声音设置】2、打开【录制】,找到一个不常用的麦克风,右击“设置为默认通讯设备”,问题解决。......
  • 11深拷贝与浅拷贝
    深拷贝和浅拷贝没有提供任何构造函数的时候,系统默认生成构造和析构函数。当需要使用拷贝构造函数是,系统默认生成拷贝构造函数,是内存拷贝。classseqStack{private: int*_pstack; int_size; int_top;public: seqStack(intsize){ _size=size; _pstack=new......
  • 双向链表C语言实现
    双向链表实现(带头结点版)双向链表的实现与单链表类似,在这里使用C语言实现,主要包括头插法插入节点,删除节点以及创建空链表抽象数据结构ADT定义双向链表与单链表的区别在于多了一个指向上一个节点的指针prevtypedefstruct_Node{intdata;struct_Node*next;......