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

C语言变量的声明和定义有什么区别?

定义:

  • 定义:为变量分配地址和存储空间
  • 声明:不分配地址和存储空间

一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件或在文件后面部分定义。

1.变量声明

  • 作用:告诉编译器“这个变量存在”,并且说明它的类型和名字,但不分配存储空间(特殊情况除外)。
  • 特征:

             1.不创建内存,只是一个“公告” 

             2.常见于extern关键字修饰的变量

             3.典型使用场景:在头文件 .h 中声明,让其他 .c 文件知道有这个变量。

  • 示例:
extern int a; // 声明,告诉编译器 a 在别的地方定义过

2.变量定义

  • 作用:真正创建变量,并分配内存空间,可以(也可以不)赋初值。

  • 特征

              1.编译器会为它分配存储空间

              2.一个变量在整个程序中只能被定义一次(全局变量)。

              3.没有extern,且位于函数体外部时,一般就是定义。

  • 示例:
int a = 10; // 定义,分配空间,并赋初值 10

3.容易混淆的点

  • 没有 extern 的全局变量声明就是定义:
int b; // 在全局范围,这是定义(分配空间,默认初始化为0)
  • 局部变量声明就是定义(因为它会分配在栈上):
void func() {int c; // 局部变量,声明同时定义
}
  • 只有声明,没有定义的变量,必须在其他文件中有定义,否则链接时报错

4.总结对比表

对比项声明(Declaration)定义(Definition)
是否分配内存否(除非是局部变量)
是否初始化可以初始化
是否唯一可以多次声明在全局范围只能有一次定义
常见关键字externextern,或带初始化
场景告诉编译器变量存在真正创建变量并分配空间

5.快速记忆

声明是告诉编译器“它有”,定义是告诉编译器“它在这里”并给它空间。

http://www.xdnf.cn/news/17691.html

相关文章:

  • 图生视频实战:用[灵龙AI API]玩转AI生成视频 – 第2篇,从静图到大片
  • 关于linux系统编程2——IO编程
  • 【Docker实战进阶】Docker 实战命令大全
  • AI基础与实践专题:PyTorch实现线性回归
  • 【unity实战】在Unity中实现不规则模型的网格建造系统(附项目源码)
  • 【实用案例】录音分片上传的核心逻辑和实现案例【文章附有代码】
  • Godot ------ 平滑拖动03
  • SpringBoot 自动配置核心机制(面试高频考点)
  • Orange的运维学习日记--38.MariaDB详解与服务部署
  • JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)
  • 《范仲淹传》读书笔记与摘要
  • 使用frp内网穿透实现远程办公
  • 基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
  • Python(9)-- 异常模块与包
  • AI Coding 概述及学习路线图
  • Elasticsearch Node.js 客户端的安装
  • 【功能测试】软件集成测试思路策略与经验总结
  • FFmpeg - 基本 API大全(视频编解码相关的)
  • 【数据结构】深入理解顺序表与通讯录项目的实现
  • leetcode-hot-100 (图论)
  • CobaltStrike的搭建和使用
  • 爬虫与数据分析实战
  • 【09-神经网络介绍2】
  • 一文读懂 C# 中的 Lazy<T>
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Godot ------ 平滑拖动02
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • C# 异步编程(计时器)
  • Python: configparser库 ini文件操作库
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套