当前位置: 首页 > news >正文

C 学习笔记 —— 声明、定义、初始化

文章目录

    • 声明
    • 定义
    • 初始化
      • 定义和初始化的区别
      • 静态变量初始化
      • 自动变量初始化

声明

说明符+表达式列表

int a;
char j, k l;

定义

一般的情况下,我们把建立空间的声明称之为定义,而把不需要建立存储空间的声明称之为声明。

int tern = 1; //定义int main() {int a; //也是定义,因为建立了存储空间extern int tern; // 声明定义在别处的变量,仅仅是声明,没有建立空间
}

tern被声明了两次,
第一次声明为变量预留了存储空间构成了定义。称为定义式声明。
第二次声明只是使用之前的变量,而没有创建空间所以仅仅是声明。

extern关键字只能做声明,不能定义。

初始化

变量的初始化: 为变量声明或者定义之后,赋上初值的过程,就是变量的初始化。

定义和初始化的区别

int a; //只是定义也是声明,但是并没有给初始值,所以不是初始化。
int a = 4; //既是定义又是初始化。
extern int a; //仅仅是声明。

当然定义和初始化也可以分开

int b; //声明/定义 变量
b = 2//初始化变量

静态变量初始化

静态变量默认将值初始化为0。
可执行程序载入到内存时,已经保存了正确值的位置,会将值赋值给变量。
完成这个任务不需要额外的时间与指令,静态变量就会初始化完成。

自动变量初始化

自动变量不会被初始化为0.
程序在链接时还无法判断自动变量的存储位置,因为局部变量可能在函数中每次调用时占据不同位置。所以自动变量会使用更多开销。

  1. 自动变量的初始化和声明然后赋值,效率一样,无差别。
  2. 静态变量每次只在程序执行时初始化一次,而自动变量在每次执行到所在函数时都会进行一次初始化。
  3. 因为自动变量初始化在运行时才执行,你可以用变量给他初始化, 而静态变量不能使用变量来初始化 。
    int a = 4;
    int b = a + 3;
    //static int c = a + 4; 编译报错
    
  4. 建议对自动变量初始化,或者保证使用前赋值,不然他会有一个垃圾值是非预期的。
http://www.lryc.cn/news/7277.html

相关文章:

  • 机械狗控制算法
  • 向量与矩阵 导数和偏导数 特征值与特征向量 概率分布 期望方差 相关系数
  • 记录--前端实现登录拼图验证
  • 【Go语言基础】Go语言中的map集合详细使用(附带源码)
  • C++11 lambda
  • 【新】华为OD机试 - 分苹果(Python)
  • Python 模块
  • gdb调试功能从零到会(Linux详解)
  • 【C语言学习笔记】:数组、指针相关面试题
  • go语言环境配置 项目启动
  • Springboot 使用插件 自动生成Mock单元测试 Squaretest
  • 「JVM 执行引擎」栈架构的字节码的解释执行引擎
  • SSM项目-商城后台管理系统
  • 什么是装运单IFTMIN?
  • 深度负反馈
  • 【每日随笔】手指训练 ( 产品需求探索、技术无关 | 手指训练作用 | 哪些人需要手指训练 | 手指操 | 手指康复训练器材 )
  • Apple Safari 16.3 - macOS 专属免费浏览器 (独立安装包免费下载)
  • 【java】Spring Boot --Spring Boot 集成 MyBatis
  • python正则表达式
  • 【C++】二叉树的非递归遍历
  • Linux——线程同步(条件变量、POSIX信号量)和线程池
  • leaflet 上传CSV文件,导出geojson格式文件(064)
  • Java内部类
  • Centos系统里运行java的jar包
  • 招标采购流程的电子招标采购,是管理复杂供应链和多层供应商的高效方式。
  • 【C语言】C程序结构和基本语法
  • YOLOv8 目标检测 | 自定义数据集
  • Lua语法入门
  • 华为OD机试真题JAVA实现【最小步骤数】真题+解题思路+代码(20222023)
  • 预检请求OPTIONS