c 声明、定义、初始化的差别

在C语言中,声明(declaration)、定义(definition)和初始化(initialization)是三个重要的概念,它们之间有一些明显的差别。以下是它们之间的主要区别:

声明(Declaration)

声明是告诉编译器某个变量或函数的名字和类型,但并不为变量分配内存空间,也不为函数提供具体的实现。它仅仅是一个声明,告诉编译器“这里有这么一个东西”。

例如,声明一个整型变量和一个函数:

extern int x; // 声明一个整型变量x,但不在当前文件中定义
void foo(int); // 声明一个函数foo,它接受一个整型参数并返回void

在这个例子中,extern int x; 是一个变量声明,它告诉编译器在其他地方(可能是另一个源文件中)有一个名为 x 的整型变量。而 void foo(int); 是一个函数声明,它告诉编译器存在一个名为 foo 的函数,该函数接受一个整型参数并返回 void

定义(Definition)

定义是为变量分配内存空间(对于变量),或者为函数提供具体的实现(对于函数)。它包含了变量或函数的所有必要信息,包括名字、类型、初始值(对于变量)以及函数的实现体(对于函数)。

例如,定义一个整型变量和一个函数:

int x = 0; // 定义并初始化一个整型变量x
void foo(int y) {
printf("%d\n", y);
} // 定义函数foo,它接受一个整型参数y并打印它

在这个例子中,int x = 0; 是一个变量定义,它定义了一个名为 x 的整型变量,并初始化为 0。而 void foo(int y) {...} 是一个函数定义,它提供了函数 foo 的具体实现。

初始化(Initialization)

初始化是为变量分配一个初始值。这通常在变量定义时完成,但也可以在变量定义后的某个时间点进行。

例如:

int x = 0; // 定义并初始化一个整型变量x
int y; // 定义整型变量y,但没有初始化(它有一个不确定的值)
y = 5; // 初始化变量y

在这个例子中,int x = 0; 是定义并初始化变量 x 的示例,而 int y; 仅仅是定义变量 y,没有初始化。然后,y = 5; 是在定义后初始化变量 y 的示例。

总结

  • 声明:告诉编译器某个变量或函数的存在和类型,但不分配内存或提供实现。
  • 定义:为变量分配内存空间或提供函数的实现体。对于变量,定义通常包括初始化。
  • 初始化:为变量分配一个初始值。这可以在定义时完成,也可以在定义后的某个时间点进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用阿里云OSS实现视频上传功能

目录 前言 视频上传 前言 阿里云对象存储服务(OSS)作为一种高可用、高扩展性的云端存储服务,为开发者提供了便捷、安全的对象存储解决方案。本文将介绍如何利用阿里云OSS实现视频上传功能。 视频上传 前期准备请看阿里云OSS文件上传和下载…

浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 刚开始我打算想推出一个规律,来判断是否是归并排序,但实在太过于复杂,我很难去想出这样的规律…因此,参考了其他博主的思路——每做一次排…

【微服务】安装docker以及可视化界面

1.配置yum下载源为aliyun源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.下载docker不加版本号默认为最新版本 yum install -y docker-ce3.启动以及开机自启 #启动docker命令 systemctl start docker #设置开机自启命令…

计算机组成原理----原码,反码与补码

目录 1.原码的出现 2.反码的出现 3.补码的出现 4.关于补码 1.原码的出现 我们通常使用"","-"判断数字的正负,而在计算机中,则将二进制的首位当作标记符号,"0"表示正数,"1"表示负数,这样就解决了在计算机中表示数值正负的问题,唯一…

allure测试报告用例数和 pytest执行用例数不相同问题

我出现的奇怪问题: pytest执行了9条用例,但是测试报告确只显示3条用例 我将其中的一个代码删除后,发现allure测试报告又正常了 我觉得很奇怪这个代码只是删除了二维数组的第一列,我检查了半天都找不到问题,只有降低版本了。导致原因:allure-pytest版本使用的是最新版本,…

编译安装python(3.9.2)

python源码下载地址https://www.python.org/ftp/python/ 编译安装python 安装构建工具: sudo apt-get update sudo apt-get install build-essential安装Python的依赖项: sudo apt-get install zlib1g-dev下载并编译Python: wget https://www…

机器学习-3-特征工程的重要性及常用特征选择方法

参考特征重要性:理解机器学习模型预测中的关键因素 参考[数据分析]特征选择的方法 1 特征重要性 特征重要性帮助我们理解哪些特征或变量对模型预测的影响最大。 特征重要性是数据科学中一个至关重要的概念,尤其是在建立预测性任务的模型时。想象你正在尝试预测明天是否会下…

ubuntu中idea创建spark项目步骤

1.前置条件 ubuntu中已经安装idea,jdk,scala,spark 2.打开idea,新建,选择Maven项目 3.在IDEA中,File-Setting-Plugin,下载Scala插件 4.File-project structure,导入插件 4.1在全局库中,选择导入刚才的sca…

写论文时某一行的字间距突然增大,如何解决?

问题描述: 某一行的字间距突然变大,占满了一行,检查设置也没有异常。 如何解决 一、全选出现问题的段落 二、右键,然后点击段落 三、然后勾选允许西文在单词中间换行 四、正常了

心链4---搜索页面前后端业务实现以及分布式session的共享实现

心链 — 伙伴匹配系统 搜索详情页面 之前前端的代码写到了搜索页面可以挑选搜索标签,并没有去根据具体标签搜索用户。这里就开始实现。 新建SearchResultPage.vue,并添加相关路由。 在搜索页添加搜索按钮,和触发点击。搜索页选择标签&#x…

WEB安全:Content Security Policy (CSP) 详解

Content Security Policy (CSP) 是一种强大的网页安全机制,用于防止跨站脚本 (XSS) 和其他注入攻击。通过设置一系列的内容安全策略,CSP 可以限制网页可以加载的资源,从而保护用户数据和网站的安全性。 什么是 XSS 攻击? 跨站脚本攻击 (XSS) 是一种常见的安全漏洞,攻击者…

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱

课程下载:https://download.csdn.net/download/m0_66047725/89360471 更多资源下载:关注我。 课程内容: 10-9、怎么寻找优质的货源店铺.mp4 11-10、怎么去选择商品图片.mp4 12-11、商品图片的注意避免事项.mp4 13-12、怎么写标题.mp4 …

【Mybatis】映射文件中获取单个参数和多个参数的写法

xml的映射文件中获取接口方法中传来的参数是直接用#{}的方式来获取的 那么接下来,我们就具体来说一下获取参数里边的各种规则和用法 1.单个参数,比如上面的getOneUser,只有一个id值作为参数 Mybatis对于只有一个参数的情况下,不…

系统思考—决策

风险来自于你不知道你在做什么。——沃伦巴菲特 今天和一个合作伙伴的创始人交流,她提出了一个引人深思的问题:“策略性陪伴和战略复盘,什么原因不由客户自己来做?”这个问题让我深入思考了第三方策略性陪伴顾问的独特价值和重要…

B3663 [语言月赛202209] Luogu Academic

[语言月赛202209] Luogu Academic 题目描述 七海在 LA 群中游走,获得了一个由英文小写字符组成的字符串 S S S。 七海想要知道,子串 luogu 在其中出现了多少次。 提示: 一个字符串中,任意连续的字符构成的子字符串称为子串。…

06 Linux编程-网络编程

1、为什么需要网络编程 管道、消息队列、共享内存、信号、信号量的IPC都是依赖于系统内核的,因此这些方式无法进行多机间(例如:linux与android、linux与单片机等)的通信。 网络编程是基于网络的,因此需要网络地…

Mac-CEP插件-安装脚本-bash-Shell基础语法

文章目录 1.安装脚本2.变量命名3.文件(文件夹)操作4.整数测试5.字符串测试6.if条件语句7.文件夹复制删除1.安装脚本 macOS 中的偏好设置和配置文件使用属性列表 (plist) 来指定某个 App 或进程的特征或属性。例如,“访达”的偏好设置 plist(位于用户个人文件夹中的“资源库…

定位器与PWM的LED控制

文章目录 一、STM32定时器二、脉宽调制pwm三、定时器控制led(1)实验内容(2)创建工程(3)Keli程序(4)观察波形图(5)实物连接图(6)实践效…

一文了解MyBatis

文章目录 MyBatis1. MyBatis的执行流程2. MyBatis是否支持延迟加载3. MyBatis延迟加载的底层原理4. MyBatis的二级缓存机制用过吗5. 谈谈MyBatis框架的优势6. 简单描述MyBatis的工作原理7. MyBatis中的sql标签8. MyBatis中的${}和#{}的区别9. MyBatis中ResulyMap的作用[重要]10…

UDP网络聊天室(更)

服务器端 #include <header.h> typedef struct node {char name[20];struct sockaddr_in cli_addr;struct node *next; }node,*node_p; typedef struct msg {char type;char name[20];char text[128]; }msg; node_p create_link() {node_p H(node_p)malloc(sizeof(node)…