C语言——(基础知识) 变量的作用域和生命周期 and 注释

简介: C语言——(基础知识) 变量的作用域和生命周期 and 注释

一、变量的作用域和生命周期


1.1作用域

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

(通俗来讲,哪里可以使用这个变量,哪里就是这个变量的作用域~)


局部变量的作用域是变量所在的局部范围。

全局变量的作用域是整个工程。

1.2生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段


1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2.全局变量的生命周期是:整个程序


举个栗子:

#include <stdio.h>
int cake = 5;
int main()
{  
  {   int cake = 1;
      printf("%d ",cake);
  }
   printf("%d",cake);
   return 0;
}


debug结果:1 5


Reason:第一个cake是全局变量,第二个cake是局部变量。局部变量只能“管”它所在的大括号 { }内部(即它的作用域),出了这个范围,局部变量的生命周期结束,自动销毁。因此对于第一个printf(),它所在代码块内的局部变量决定了输出的是1;出了这个代码块,cake = 1销毁,printf()执行全局变量 int cake = 5,因此输出的是5.


’ 现在看看这个栗子:

#include <stdio.h>
int main()
{
   { 
     int num1 = 2;
   }
   printf("%d",num1);
return 0;
}


这样显然会报错,因为局部变量num1出了作用域就被销毁,自然print不出num1了


二、注释


2.1为什么要注释

1.代码中有不需要的代码可以直接删除,也可以注释掉

2.有些代码比较难懂,可以加一下注释文字(也可以防止过一段时间忘了自己之前写的是什么意思)


2.2两种注释风格

1.C语言风格的注释

int main()
{
  int a = 100;
  /* int b = (a++);
   int b=a,a=a+1;
    int b = ++a;
    a=a+1,b=a; */
  int b = ++a;
  printf("a=%d b=%d\n", a, b);
  return 0;
}


但是这种风格的缺点是不能嵌套注释,像这样:

int main()
{
  1/*int a = 100;
  /* int b = (a++);
   int b=a,a=a+1;
    int b = ++a;
    a=a+1,b=a; */
  int b = ++a;
  printf("a=%d b=%d\n", a, b);*/1
  return 0;
}


我想让1和1配对(这里仅为了表示方便,标注了两个1,原则是错误的),这样是不可以的,因为最开始出现"/星"会和最开始出现的"星/"配对,导致出错


2.C++风格的注释:在每行开头加上//

int main()
{
  int a = 100;
  //int b = (a++);//后置++,先使用,后++
  //int b=a,a=a+1;
  //int b = ++a;//前置++,先++,后使用
  //a=a+1,b=a;
  int b = ++a;
  printf("a=%d b=%d\n", a, b);
  return 0;
}


简洁直观,非常nice~

相关文章
|
1月前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
53 12
|
1月前
|
C语言
【C语言】全局搜索变量却找不到定义?原来是因为宏!
使用条件编译和 `extern` 来管理全局变量的定义和声明是一种有效的技术,但应谨慎使用。在可能的情况下,应该优先考虑使用局部变量、函数参数和返回值、静态变量或者更高级的封装技术(如结构体和类)来减少全局变量的使用。
41 5
|
3月前
|
存储 C语言
【c语言】数据类型和变量
本文介绍了C语言中的数据类型和变量。数据类型分为内置类型和自定义类型,内置类型包括字符型、整型、浮点型等,每种类型有不同的内存大小和取值范围。变量分为全局变量和局部变量,它们在内存中的存储位置也有所不同,分别位于静态区和栈区。通过示例代码和图解,详细阐述了这些概念及其应用。
61 1
|
3月前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
3月前
|
存储 C语言
初识C语言:常量与变量中寻找数据类型
初识C语言:常量与变量中寻找数据类型
|
C语言 程序员 编译器
|
程序员 C语言 编译器
C语言关键字、标识符和注释
一、关键字 C语言提供的有特殊含义的符号,共32个。 在Xcode中关键字全部高亮显示,关键字全部都为小写。如return、int等。 二、标识符 定义:标识符是程序员在程序中自定义的一些符号和名称。
506 0
|
3天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
39 23
|
3天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
26 15
|
3天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
39 24