【C语言学习3——基本的C语言语法知识1】

news2025/1/19 11:27:27

C语言学习3——基本的C语言语法知识

  • 主函数
  • 什么是主函数?
  • 写一个自己的函数
  • 主函数是整个C语言程序的入口
  • 要调用函数,必须先知道函数
  • 什么是变量?

#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}

相信你已经看到了第一个示例代码的效果了。这个程序所实现的效果很简单,就是在屏幕上输出了一行
字符"Hello World"。
我们根据这一小段代码,借此了解一些C语言的基础语法知识。

主函数

首先,主函数 main ,一个标准的主函数如下:

int main() // 这是主函数
{
return 0; // 主函数返回值
}

main 翻译成中文是主要的、最重要的意思,而在C语言里面表示一个主函数。
双斜杠后面的为 注释 ,打一个比较形象的比喻, 注释 就类似于老师在作业本上的批注。
一般来说,注释用于标注这段代码的用途或解释思路等。因为注释不会被当作代码进行编译,所以无论
添加什么注释内容,都不会对代码的实际运行产生任何影响。
如上代码中,用注释标出了哪里为 主函数 ,哪里是函数的 返回值 。

什么是主函数?

我们先谈谈什么是 函数 ?在大家的认知里面,函数是数学领域的一个名词,它可能是如下图所示:
在这里插入图片描述
但是,这只是数学领域中的 函数 ,与编程语言中的 函数 完全不同。
在编程语言里面,你可以把函数看做一个盒子,这个盒子有如下几个特性:
1. 开始执行时,函数可以被输入一些值
2. 执行过程中,函数可以做一些事情
3. 执行完成后,函数可以返回一些值

4. 在这里插入图片描述
让我们看看我们的这个主函数,在这3个特性上,分别做了什么。
在这里插入图片描述
1. 主函数什么都没有输入
5. 主函数打印了一行字到屏幕上
6. 主函数返回了0

在这里插入图片描述
其中, int 表明了函数的 返回值类型 为整数类型, int 是 integer(整数) 的缩写。这是由语言标准规定
的,不可以写成别的单词。
main 是 函数名 , main 后面的括号 () 内为输入参数,目前为空。
return 后跟函数的 返回值 ,为0。而0是一个整数,和函数名前面的 int 对应。
我们总结一下函数的写法公式:

函数返回值类型 函数名(函数输入参数值)
{
做点什么事情
return 函数返回值;
}

被花括号包括的被称为 函数体 ,注意函数体一定要被花括号包括且不可省略。花括号上面的函数名、函
数参数及返回值被称作 函数头 。
在这里插入图片描述

写一个自己的函数

我们不如趁热打铁,根据上面的函数写法的公式,写一个两个整数加法的函数。这个函数需要做到:输
入两个整数,返回它们相加的结果。
这个既然这个函数是用于计算加法的,我们把函数名取名为 add 。当然自定义函数的函数名可以按照自
己的喜好来写,就算写成aaaaa也行。不过,为了函数名拥有语义化,方便人阅读理解,我们一般使用
英文来作为函数名。

// 这一段代码被称之为add函数的函数定义
int add(int a, int b)
{
return a + b;
}

在这里插入图片描述
好的,那我们写完了一个 add函数 了。这一段代码被称之为add函数的函数定义。

主函数是整个C语言程序的入口

上面我们已经自己定义好了一个 add函数 ,那我们需要怎样来使用它呢? add函数 能直接运行嘛?
答案是不行的。
所有的C语言代码都有一个起始入口,而这个入口就是 主函数main 。进入了主函数以后,才能经由主函
数来调用其他函数。
这也意味着,每个C语言代码,只能有且只有一个main函数。
我们把代码稍微修改,现在代码如下。

#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
int result;
result = add(2, 3);
printf("%d", result);
return 0;
}

当程序运行时,首先会进入 主函数main 。接着调用我们刚刚编写的 add函数 了。我们传了2个值分别是整数2和3给 add函数 。
函数的定义中规定了需要传a、b,2个参数,我们调用的时候,也必须传2个,并且类型也需要尽量一
致,否则编译可能会报错。(若类型不同,编译器会尝试自动类型转换。自动类型转换失败则会编译失
败。)
在这里插入图片描述
那么自然地,我们会想到,主函数是被谁调用的?主函数的返回值必须是 int 吗?
主函数在程序开始的时候被自动调用,不需要在程序内主动调用主函数。
而主函数的返回值会返回给调用这个程序的程序。
C语言标准中规定主函数有返回值且必须是 int 。如果程序正常结束,一般将返回值设置为0。

要调用函数,必须先知道函数

我们再来看看,编译器是怎么理解 add 这个名称的。
编译器会从代码开始,按照从上往下的顺序阅读代码。
编译器首先看到了一个函数的定义,描述了一个叫 add 的函数。接着,在 main 中需要使用 add ,由于
编译器已经知道了 add 的定义,因此编译器可以正常编译通过。
在这里插入图片描述
但是,如果将函数定义和函数调用反过来呢?
首先,编译器看到了 add 这个名称,编译器会很疑惑, add 是什么呢?编译器无法理解 add 究竟是什
么。因此,编译器将报错,并停止编译。
在这里插入图片描述

什么是变量?

在 add函数 计算完毕之后,需要有一个东西来接受 add 返回回来的值。所以,我们在 add 前面声明了一
个 int整型 的 变量 。
什么是变量呢?你可以把它看做一个空箱子,里面可以装任何其他的和它类型一致的值。
result 只是我们给它起的一个名字,当然,你可以任意起名。比如叫he,叫xiangzi,都可以。
我们把 add 返回回来的5,装进了 result 。因此, result 里面装着的值是5了。
= 等号,在C语言中是赋值运算符,相信你已经发现它有把右边的值装进左边变量的功能了。和函数一样,这里的等号和数学里面的等号,也是有很大不同的,它并不是相等的意思。
赋值运算符:将符号右边的值,装进左边的变量的一种运算符。
下图就是 add函数 接受2,3为输入,返回5,被赋值号 = 赋值给 result 的流程了。
在这里插入图片描述
那我们能不能这样写呢?去掉 int result; 这一条。

int main()
{
result = add(2, 3);
printf("%d", result);
return 0;
}

答案是不行的,变量必须先声明后使用。
编译器看到 result 这个名称,但是从未见过 result 的定义时,肯定也会疑惑它究竟是个什么类型的变
量,甚至它有可能不是变量而是一个函数。这样,编译器只能遗憾地给出一个编译错误的提示,并结束
编译了。

int result;

你必须像上面这样,声明有一个变量,名字叫 result ,类型是 int 。接下来,编辑器就能记
下 result 为一个 int 类型的变量。在后面的代码中,即可愉快地使用这个 result 变量了。

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

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

相关文章

科研人的R速成利器,读这两本就够了!

R 是数据科学领域的一门大热的编程语言&#xff0c;可以说它是专门为统计分析而生的。 相比起其他语言&#xff0c;R 简单易学&#xff0c;代码可读性强&#xff0c;并且不需要搭建复杂的编程环境&#xff0c;对初学者非常友好。 今天就和大家分享两本学习R的宝藏图书&#x…

【FPGA实验4】举重比赛机制

举重比赛有三名裁判&#xff0c;当运动员将杠铃举起后&#xff0c;须有两名或两名以上裁判认可&#xff0c;方可判定试举成功&#xff0c;若用A、B、C分别代表三名裁判的意见输入&#xff0c;同意为1&#xff0c;否定为0;F为裁判结果输出&#xff0c;试举成功时F1&#xff0c;试…

02-神经网络基础

一、从机器学习到神经网络 1. 两层神经网络 - 多层感知机 2. 浅层神经网络特点 (1)需要数据量小、训练速度快; (2)对复杂函数的表示能力有限,泛化能力受到制约。 Kurt Hornik 证明了理论上两层神经网络足以拟合任意函数,而且过去没有足够的数据和计算能力,因此之前的…

计算机组成原理实验1---运算器 预习报告

本实验为哈尔滨工业大学计算机组成原理实验&#xff0c;实验内容均为个人完成&#xff0c;目的是分享交流&#xff0c;如有抄袭将追究责任&#xff0c;笔者能力有限&#xff0c;若因此影响读者的分数&#xff0c;本人深表抱歉。 一、 实验目的 了解运算器的组成结构基于数据通…

ChatGPT 究竟在做什么?它为何能做到这些?(2)

机器学习和神经网络的训练 到目前为止&#xff0c;我们一直在讨论那些 “已经知道” 如何完成特定任务的神经网络。但是&#xff0c;神经网络之所以如此有用&#xff08;估计也是在大脑中&#xff09;&#xff0c;是因为它们不仅是可以完成各种任务&#xff0c;而且可以逐步 “…

数据 数据元素 数据项 数据对象

文章目录数据、数据元素、数据项和数据对象数据数据元素数据对象数据元素和数据对象数据结构数据结构包括以下三个方面的内容逻辑结构物理结构&#xff08;存储结构&#xff09;逻辑结构与存储结构的关系逻辑结构的种类集合结构线性结构树型结构图状结构或网状结构四种基本的存…

【人工智能】模糊推理

模糊推理:以下内容都是我自学理解的&#xff0c;不保证对引言&#xff1a;“生活中的模糊关系”模糊集合模糊集合的定义模糊集合的表示法模糊集合表示法示例隶属函数模糊规则模糊计算的流程引言&#xff1a;“生活中的模糊关系” 如果说&#xff0c;我们简单的将 温度<10度 …

如何构建敏捷项目管理团队?

敏捷专家认为&#xff1a;团队合作对于交付出色软件来说非常关键&#xff0c;而在优秀的敏捷团队普遍都是站在集体的角度去思考和工作&#xff0c;而不是以个体的形式。对每个成员来说更有价值的是——优秀的成员都会站在团队的角度将自己宝贵的开发经验分享出来&#xff0c;来…

mysql(beetlsql框架)适配人大金仓(KingBase)有感

毁灭吧&#xff0c;前几天加班适配kingbase&#xff0c;发现坑是真滴多&#xff0c;小小总结一波。 tips:kingbase的语法可以直接参照pgsql...他们两个是通用的&#xff08;应该&#xff09; 1. 的坑 在Mysql里面的 (不是单引号&#xff01; 和 还是有点区别的) 这是拿来…

机械臂路径规划path planning

一、路径规划&#xff1a;假设机械臂的终端结构要从一个点运动到另一个点&#xff0c;我们要求所有的关节和终端机构在运动的过程中都不能碰到障碍物&#xff0c;这个称为路径规划。 1、路径规划算法主要可分成两种&#xff1a; &#xff08;1&#xff09;一种是基于搜索结果…

第十三天缓存一致性篇

目录 一、缓存的应用场景 二、缓存数据一致性如何保证&#xff1f; 三、缓存的最终一致性解决方案&#xff1a; 一、缓存的应用场景 1、缓存中的数据不应该是实时性一致性要求超高的&#xff0c; 通过缓存加上过期时间保证每天拿到的数据都是最新的即可。 2、如果实时性要求…

tcp通信,客户端服务端

进行过程 //TCP通信的流程 //服务器端&#xff08;被动接受连接的角色&#xff09; 1.创建一个用于监听的套接字 -监听&#xff1a;监听有客户端的连接 -套接字&#xff1a;这个套接字其实就是一个文件描述符 2.将这个监听文件描述符和本地的IP和端口绑定&#xff08;IP和端口…

飞凌嵌入式AM62x核心板,赋能新一代HMI

HMI&#xff08;人机界面&#xff09;是系统和用户之间进行交互和信息交换的媒介&#xff0c;凡是涉及人机信息交流的领域都离不开人机界面&#xff0c;因此在许多行业内都能见到HMI的身影。随着技术的进步HMI也在持续发展和演进&#xff0c;除了数据收集、控制和显示外&#x…

在采购过程中保持供应商诚实的5种方法

不信任潜在供应商的心理在B2B买家中很常见。据报告称&#xff0c;供应商和买家之间存在着信任差距。这不是针对个人&#xff0c;而是健康的怀疑态度。谁不会对他们企业的潜在六七位数技术投资持怀疑态度&#xff1f; 企业和其供应商之间的关系通常是决定成败的关键。为此&…

SQL 条件函数 日期函数 文本函数 窗口函数

玩了几天&#xff0c;劳逸结合&#xff0c;继续复习刷题sql 一、条件函数 1.题目&#xff1a;现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段&#xff0c;分别查看这两个年龄段用户数量&#xff08;age为null 也记为 25岁以下&#xff09; user_profile 期望结果&…

【论文阅读】MAMIL

1、基本信息 misc{Konstantinov_Utkin, title{Multi-Attention Multiple Instance Learning}, author{Konstantinov, AndreiV. and Utkin, LevV.} }2、摘要 本文提出了基于多注意力的MIL问题求解方法&#xff0c;该方法考虑了包中每个被分析实例的相邻实例。在该方法中&…

如何还原min.js文件

最近在看别人给的一个代码包&#xff0c;但是有一些文件是 xx.min.js ,这种文件在vscode中打开后是这样的 这种怎么阅读&#xff0c;太难了&#xff0c;于是全选&#xff0c;右键格式化文档&#xff0c;不管用 通过咨询群友&#xff0c;学到了&#xff1a; 回答一&#xff1…

vscode开发常用的工具栏选项,查看源码技巧以及【vscode常用的快捷键】

一、开发常用的工具栏选项 1、当前打开的文件快速在左侧资源树中定位&#xff1a; 其实打开了当前的文件已经有在左侧资源树木定位了&#xff0c;只是颜色比较浅 2、打开太多文件的时候&#xff0c;可以关闭 3、设置查看当前类或文件的结构 OUTLINE 相当于idea 查看当前类或接…

【计算机网络-数据链路层】流量控制与可靠传输机制

文章目录1 停止-等待协议1.1 无差错情况1.2 有差错情况——数据帧出错或丢失1.3 有差错情况——ACK 丢失1.4 有差错情况——ACK 迟到1.5 性能分析1.6 相关例题2 后退 N 帧协议&#xff08;GBN&#xff09;2.1 无差错情况2.2 超时重传、回退 N 帧2.3 相关例题3 选择重传协议&…

AX7A200教程(6): 串口接收图片数据,通过hdmi接口输出显示

本章节主要使用uart接收图片数据&#xff0c;然后通过ddr3缓存&#xff0c;最后通过hdmi接口显示输出&#xff0c;功能框图如下图所示 uart接收的图片数据位1024*768*3分辨率大小的数据&#xff0c;一共2359296个字节&#xff0c;输入图片如下图所示 图片属性 串口接收数据&…