C语言基础-3

1、函数

        函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成。这就是程序设计的基本分化方法。

        main:C语言中所谓的主函数,主函数就是一种特别的函数。特别之处在于,一个C语言程序只能有且必须有一个main函数。C语言规定,一个C语言程序从主函数开始执行,到主函数执行完结束。

1.1、函数三要素

1.1.1、函数定义:

        函数定义是关键,是这个函数的实现。函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能。

//函数定义,又叫函数实现
int sub(int a, int b)
{return a - b;					// 函数定义后面没有分号,但是有{}和函数体
}

1.1.2、函数声明:

        函数声明实际上是叫函数原型声明。什么叫原型?函数的原型包含三部分:函数名,返回值类型,函数参数列表。通俗讲,函数原型就是这个函数叫什么,接收什么类型的几个参数,返回一个什么样的返回值。

        函数声明的作用:在于告诉使用函数的人,这个函数使用时应该传递给他什么样的参数,它会返回什么样类型的返回值。这些东西都是写函数的人在函数定义中规定好的,如果使用函数的人不参照这个原型来使用,就会出错,结果就会和你想的不一样。

        声明周期:指一个东西从出生到死亡的过程。

//函数声明
int sub(int a, int b);        //函数声明后面必须有分号

1.1.3、函数调用:

        函数调用就是使用函数名来调用函数完成功能。调用时必须参照原型给函数传参,然后从函数得到适当的返回值作为结果。

//函数调用,调用已经写好的函数模块来完成既定功能
c = sub(b, a);	        //函数调用后面有分号

1.2、函数参数

        形参:形式参数的简称。在函数定义和函数声明中的参数列表中的参数,都是形参。

        实参:实际参数的简称。函数调用中,实际传递的参数才是实参。     

        函数调用的过程,其实就是实参传递给形参的一个过程。这个传递实际是一次拷贝。实际参数的时候,实参(本质是一个变量)本身并没有进入到函数内,而是把自己的值复制了一份传给了函数中的形参,在函数中参与运算。这种传参方法,就叫做传值调用。

        实参在给形参传参的时候,是按顺序传参的,不是名字。

        实参的类型必须和形参类型相同,否则就可能会出错。

1.3、返回值(关键字return)

        当函数执行完之后,会给调用该函数的地方返回一个值。这个值的类型就是函数声明中返回值类型,这个值就是函数体中最后一句return xxx;返回的那个值。

1.4、函数名,变量名

        第一点:起名字时候不能随意,要遵守规则。这个规则有两个层次:第一层就是合法,第二层是合理。合法就是符号C语言中变量名的命名规则。合理就是变量名起的好,人一看就知道什么意思,一看就知道这个函数是干嘛的,而且优美、好记。
        第二点:C语言中,所有的符号都是区分大小写的。也就是说abc和Abc和aBc都是不同的符号。
        第三点:C语言函数名变量名的命名习惯。没有固定的结论,有多种使用都很广泛的命名方式。介绍两种这里:
                一种是linux的命名习惯    student_age        str_to_int
                另一种是骆驼命名法        studentAge        StrToInt

1.5、注

        1、《高质量程序设计指南》作者:林锐,可以看看

        2.、华为代码规范,可以网上找找看看

2、数组

        基本数据类型:整形、浮点型、字符型。

        复合数据类型,是指由简单数据类型,经过一定的数据结构封装,组成而成的新的数据类型。例如:数组、结构体、公用体。

2.1、为什么需要数组

        数组就是数组成一个组,数就是一个特定数据类型的变量,组就是说好多数放在了一起。

2.2、怎么定义数组

int a[4];			//数组中元素类型	数组名[数组元素个数];

        数组中的所有元素必须是同一种数据类型,不可能在一个数组中存储两种数据类型的数。

2.3、怎么使用数组

        数组定义的时候作为整体定义。但是使用的时候不能作为整体使用,使用时必须拆开使用数组中的各个元素。

int a[4];
//使用其中的四个元素,分别用a[0]``a[3],其中[]是数组的标志,[]中的数字叫做数组下标(index,索引),下标是我们访问数组中各个元素的指引。
//下标是0代表数组中第一个元素,下标是1代表数组第二个元素。如果数组长度为n,下标中最后一个是n-1。
//访问数组时要特别注意下标,下标是从0开始的,如果下标超出了n-1,会产生越界访问,结果是不可预期的。

2.4、数组的初始化

        初始化(initinalize,简写为init),是为了让对象有一个预定的初始状态。

2.4.1、 简单变量的初始化

        当一个局部变量定义时没有初始化,它的值是随机的。这个如果没有注意,可能会导致程序出错。怎么办?解决方案有两个:
        第一个,在定义过后明确给它赋值,使用=运算符。
        第二个,定义该变量时,同时进行初始化。

注:

        1、一般来讲,只要你记得显示赋值,则两种方式并无优劣差异。但是人会犯错,会不小心,所以还是定义同时初始化好一点,因为这个定义的时候就有了固定值,即使之后忘记显示赋值也不会造成结果是随机的。

        2、一般情况下,定义的同时都将变量初始化为0。局部变量定义同时初始化为0,这是一个写代码好习惯。

2.4.2、数组的初始化方式

        第一种:完全初始化,依次赋值。

int a[3] = {1,3,5}    //a[0] = 1, a[1] = 3, a[2] = 5

        第二种:不完全初始化,初始化式中的值从a[0]开始,依次向后赋值,不足的默认用0填充赋值。

int a[3] = {2}    //a[0] = 2, a[1] = 0, a[2] = 0

2.5、不同数据类型的数组

int a[5];			// 整形数组
float a[5];			// 浮点型数组
double a[5];		// 双精度浮点型数组
char a[5];			// 字符数组

        程序在环境中运行时,需要一定的资源支持。这些资源包括:CPU(运算能力)、内存等,这些资源一般由运行时环境(一般是操作系统)来提供,例如我们在linux系统上./a.out运行程序时,linux系统为我们提供了运算能力和内存。

        程序越庞大,运行时消耗的资源越多。例如内存占用,越大的程序,占用的内存越多。占用内存的其中之一,就是我们在程序中定义的变量。

        C语言程序中,变量的实质就是内存中的一个格子。当我们定义(创造一个变量)了一个变量后,就相当于在内存中得到了一个格子,这个格子的名字就是变量名,以后访问这个内存格子就使用该变量名就行了。这就是变量的本质。

2.6、字符数组及它的两种初始化

//定义字符数组
char a[5];
//定义的同时进行初始化
char a[5] = {'a', 'b', 'c'};    //a[0] = 'a', a[1] = 'b', a[2] = 'c'
char a[5] = {97, 98, 99};       //a[0] = 'a', a[1] = 'b', a[2] = 'c'
char a[] = {'a', 'b', 'c'};     //a[0] = 'a', a[1] = 'b', a[2] = 'c'
//字符串方式来初始化字符数组
char a[] = "abc";               //a[0] = 'a', a[1] = 'b', a[2] = 'c'

2.6.1、注:

1、在C语言中引用一个单个字符时,应该用单引号''括起来,例如'a'。

2、定义数组同时初始化,则可以省略数组定义时[]中的长度。C语言编译器会自动推论其长度,推论依据是初始化式中初始化元素的个数。由此可知,省略[]中数组元素个数只有一种情况,那就是后面的初始化式必须为完全初始化。

3、在C语言中引用一个字符串时,应该用""括起来,例如"abc"。

4、"abc"实际上有4个字符,分别是'a' 'b' 'c' '\0'。

5、'\0' 这个字符是ASCII码表中的第一个字符,它的编码值是0,对应的字符是空字符(不可见字符,在屏幕上看不见,没法显示,一般要用转义字符方式来显示。例如'\n'表示回车符,'\t'表示Tab,'\0'代表空字符)

6、'\0'是C语言中定义的字符串的结尾标志。所以,当c语言程序中使用"abc"这种方式去初始化时,编译器会自动在字符'e'后面添加一个'\0'。于是乎变成了4个字符。

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

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

相关文章

在EF Core中为数据表按列加密存储

假设有User表 public class User : Entity<int> {public int Id { get; set; }public string UserName { get; set; }public string Name { get; set; }public string IdentificationNumber { get; set; } }其中有身份证号码IdentificationNumber列&#xff0c;需要加密…

CSS 学习网站

&#x1f310; 基础学习 cssreference.io/ CSS 参考书 chokcoco.github.io/CSS-Inspira… CSS 灵感 www.awwwards.com/sites/zero-… UI 设计师的灵感源泉 htmlcheatsheet.com/css/ 交互式在线 CSS 速记表 zh.learnlayout.com/ 学习 CSS 布局 css-tricks.com/ CSS 小花招…

虚拟机(VMware)安装Linux(Ubuntu)安装教程

清华大学开源网站镜像站网址&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror 进入之后在搜索框中搜索“ubuntu” 直接点击箭头所指的蓝色字体“ubuntu-20.04.1-desktop-amd64.iso”即可下载

面试:Spring Cloud和Kubernetes的优缺点

Spring Cloud 优点 spring cloud是从应用框架层面解决微服务架构的一部分&#xff0c;如网关、服务发现、负载平衡、配置管理、指标跟踪等&#xff0c;易于Java开发者上手。 缺点 缺乏打包、持续集成、伸缩、高可用和自我修复等&#xff0c;且局限于Java平台。 Kubernetes …

[Ubuntu 22.04] containerd配置HTTP方式拉取私仓Harbor

文章目录 1. 基础环境配置2. Docker安装3. 部署Harbor&#xff0c;HTTP访问4. 部署ContainerD5. 修改docker配置文件&#xff0c;向harbor中推入镜像6. 配置containerd6.1. 拉取镜像验证6.2. 推送镜像验证 1. 基础环境配置 [Ubuntu 22.04] 安装K8S基础环境准备脚本 2. Docker安…

听说 Spring Bean 的创建还有一条捷径?

文章目录 1. resolveBeforeInstantiation1.1 applyBeanPostProcessorsBeforeInstantiation1.2 applyBeanPostProcessorsAfterInitialization1.3 案例 2. 源码实践2.1 切面 Bean2.2 普通 Bean 在 Spring Bean 的创建方法中&#xff0c;有如下一段代码&#xff1a; AbstractAutow…

详解rocketMq通信模块升级构想

本文从开发者的角度深入解析了基于netty的通信模块, 并通过简易扩展实现微服务化通信工具雏形, 适合于想要了解netty通信框架的使用案例, 想了解中间件通信模块设计, 以及微服务通信底层架构的同学。希望此文能给大家带来通信模块架构灵感。 概述 网络通信是很常见的需求&#…

什么是自动化测试?

什么是自动化测&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&#…

vue2企业级项目(三)

vue2企业级项目&#xff08;三&#xff09; 引入mockjs&#xff0c;i18n 1、mockjs 项目下载依赖 npm install --save-dev mock根目录创建mock文件夹&#xff0c;并创建mock/index.js import Mock from "mockjs";// 设置全局延时 没有延时的话有时候会检测不到数据…

k8s安装prometheus

安装 在目标集群上&#xff0c;执行如下命令&#xff1a; kubectl apply -f https://gitee.com/i512team/dhorse/raw/main/conf/kubernetes-prometheus.yml使用 1.在浏览器访问地址&#xff1a;http://master_ip:30000&#xff0c;如下图所示&#xff1a; 2.查看k8s自带的…

yolov5 onnx模型 转为 rknn模型

1、转换为rknn模型环境搭建 onnx模型需要转换为rknn模型才能在rv1126开发板上运行&#xff0c;所以需要先搭建转换环境 模型转换工具 模型转换相关文件下载&#xff1a; 网盘下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;teuc 将其移动到虚拟机中&#xf…

android——ktor封装

ktor封装 代码如下&#xff1a; object KtorClient { // private const val BASE_URL "http://***.**.***.62:8002"private const val BASE_URL "https://mock.***.cn"val client HttpClient(CIO) {install(ContentNegotiation) {json(Json {pretty…

洛谷题单 Part 6.7.1 矩阵

应队友要求&#xff0c;开始学线性代数&#xff0c;具体路线是矩阵 → \rightarrow →高斯消元 → \rightarrow →线性基。为多项式做个准备 P3390 【模板】矩阵快速幂 题面 板子&#xff0c;用结构体写的&#xff0c;感觉有点丑&#xff0c;一会儿看看题解有没有写得好看的 …

Java 递归实现迷宫出逃小游戏

Java 递归实现迷宫出逃小游戏 一、规则二、代码实现三、运行结果 一、规则 数字含义 0 - 路; 1 - 墙; 2 - 通路; 3 - 死路 寻路策略 向下 --> 向右 --> 向上 --> 向左 二、代码实现 public class MyClass {public static void main(String[] args){//迷宫地图&…

前端开发Vue3.0 标签setup语法『UI组件库』之『模态框』【业务提升必备】

封装模态框需要定义的参数 title //弹窗标题 show // 是否显示弹窗 width // 弹窗宽度 height // 弹窗高度 borderRadius // 弹窗圆角 headerColor // 弹窗顶部颜色 contentText // 内容文本 contentTextCorder //内容文本颜色 position // 标题的位置 …

OpenCV 算法解析

opencv大坑之BGR opencv对于读进来的图片的通道排列是BGR&#xff0c;而不是主流的RGB&#xff01;谨记&#xff01; #opencv读入的矩阵是BGR&#xff0c;如果想转为RGB&#xff0c;可以这么转 img4 cv2.imread(1.jpg) img4 cv2.cvtColor(img4,cv2.COLOR_BGR2RGB) OpenCV 常见…

自定义 View(六) 自定义评分星星

先看看效果图 1.自定义 View 的基本流程 创建 View Class创建 attr 属性文件&#xff0c;确定属性View Class 绑定 attr 属性onMeasure 测量onDraw 绘制onTouchEvent ( 用户交互需要处理 ) 1.1 创建 View Class package com.example.view_day05_ratingbar;import android.…

javaweb会话技术

cookie的入门使用 package com.hspedu.cookie;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import …

GAMES104里渲染等一些剩下的问题

渲染的一些剩下的问题 1. 如何理解渲染中的AO(环境光遮蔽) 环境光遮蔽 我们先从一个简单的效果开始—环境光遮蔽(Ambient Occlusion,以下简称AO)。大家可以看到&#xff0c;下图中的场景没有任何渲染效果&#xff0c;也没有任何着色效果&#xff0c;但场景呈现出了非常清晰的…

面试-杨辉三角python递归实现,二进制转换

杨辉三角 def yang_hui(x,y):xint(x)yint(y)assert x>y,列数不应该大于行数# x 表示行&#xff0c;y表示列if y1 or yx:return 1else:return yang_hui(x-1,y-1)yang_hui(x-1,y)xinput(输入第几行) yinput(输入第几列) resultyang_hui(int(x),int(y)) print(result) #inclu…