首页 > 其他分享 >C语言-变量

C语言-变量

时间:2023-06-02 23:32:20浏览次数:43  
标签:变量 作用域 代码 C语言 int printf 声明

变量的作用域

作用域(scope)指的是变量生效的范围。C 语言的变量作用域主要有两种:文件作用域(file scope)和块作用域(block scope)。

文件作用域(file scope)指的是,在源码文件顶层声明的变量,从声明的位置到文件结束都有效。

int x = 1;

int main(void) {
  printf("%i\n", x);
}

上面示例中,变量x是在文件顶层声明的,从声明位置开始的整个当前文件都是它的作用域,可以在这个范围的任何地方读取这个变量,比如函数main()内部就可以读取这个变量。

块作用域(block scope)指的是由大括号({})组成的代码块,它形成一个单独的作用域。凡是在块作用域里面声明的变量,只在当前代码块有效,代码块外部不可见。

int a = 12;

if (a == 12) {
  int b = 99;
  printf("%d %d\n", a, b);  // 12 99
}

printf("%d\n", a);  // 12
printf("%d\n", b);  // 出错

上面例子中,变量b是在if代码块里面声明的,所以对于大括号外面的代码,这个变量是不存在的。

代码块可以嵌套,即代码块内部还有代码块,这时就形成了多层的块作用域。它的规则是:内层代码块可以使用外层声明的变量,但外层不可以使用内层声明的变量。如果内层的变量与外层同名,那么会在当前作用域覆盖外层变量。

{
  int i = 10;

  {
    int i = 20;
    printf("%d\n", i);  // 20
  }

  printf("%d\n", i);  // 10
}

上面示例中,内层和外层都有一个变量i,每个作用域都会优先使用当前作用域声明的i

最常见的块作用域就是函数,函数内部声明的变量,对于函数外部是不可见的。for循环也是一个块作用域,循环变量只对循环体内部可见,外部是不可见的。

for (int i = 0; i < 10; i++)
  printf("%d\n", i);

printf("%d\n", i); // 出错

上面示例中,for循环省略了大括号,但依然是一个块作用域,在外部读取循环变量i,编译器就会报错。

标签:变量,作用域,代码,C语言,int,printf,声明
From: https://blog.51cto.com/u_10538247/6406031

相关文章

  • 2、Ansible如何写playbook及playbook中使用变量
    ansible的playbook(按照yaml格式)三种常见的数据格式XMLJSONYAMLYAML支持的几种常用数据类型标量:单个的、不可再分的值对象:键值对的集合(字典)数组:一组按次序排列的值(列表)playbook命令--syntax,--syntax-check#语法检查,功能相当于bash-n-C--check#......
  • C语言编程-共用体
    共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义共用体为了定义共用体,您必须使用union语句,方式与定义结构类似。union语句定义......
  • C++字符串分割和C语言常用格式控制
    C++string的输出格式控制输出一个字符串:左对齐,字宽为10,空格填充1.strings;2.cin>>s;3.cout<<std::left<<setw(10)<<setfill('*')<<s<<endl;输入:love输出效果:love******C++string字符流字符分割技巧输入一行字符串,然后按某个字符分割成若干子串1.strings;......
  • 【C语言】动态内存管理函数的 深度解析 #是不是对数组不能变大变小而烦恼呢?学会动态内
    前言动态内存管理函数可以说很好用,但是有些小危险。所谓动态内存分配,就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求......
  • 初识c语言
    基本报错:如果我们在编译出现时要加上一句话在开头#define_CRT_SECURE_NO_WARNINGS1目的为了代码拥有跨平台性如何每次都加在源文件找到vs安装路径—找到newc++file.cpp文件,更改文件为#define_CRT_SECURE_NO_WARNINGS1可用一个工具notepad++强制更改;常量(不变的量)字面常量cons......
  • 经典C语言模拟字符串库操作
    1.模拟strcpy(字符串拷贝函数)#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<assert.h>char*my_strcpy(char*dest,constchar*src){char*pc=dest;assert(src);assert(dest);while(*de......
  • 可执行文件的内存模型,变量的值是放在栈上还是放在堆上
    作者:@古明地盆喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号也可以,会持续分享高质量Python文章,以及其它相关内容。:点击查看公众号楔子作为开发者,我们一辈子会经历很多工具、框架和语言,但是这些东西无论怎么变,底层逻辑都是不变的。所以今天我们就回头重新思考编程中那些耳......
  • Vue3 reactive 定义一个变量时,如何具有响应式?
    错误示范:constarr=reactive([]);constload=()=>{constres=[2,3,4,5];//假设请求接口返回的数据//方法1失败,直接赋值丢失了响应性//arr=res;//方法2这样也是失败//arr.concat(res);//方法3可以,但是很麻烦res.forEach(e=>{......
  • 伪元素显示变量值的方法
    1.使用attr引用父元素属性<lidata-name="小明">li::after{content:attr(data-name);}2.非content属性可以直接引用css变量<listyle="--width:40px"></li>li::after{content:attr(data-name);width:var(--width)}3.co......
  • 俄罗斯方块-C语言-详注版
    俄罗斯方块-C语言-详注版概述本文详述了C语言版俄罗斯方块游戏的原理以及实现方法,对游戏代码进行了详细的分析和注释,通过本文能够让大家对WIN32编程框架有一个大致了解,对C语言运用有一定提高,同时也能给大家提供一个C语言小游戏编程的思路,也能完全够通过自己的实力去编写一个属......