C语言的那些少见的事1

news2025/2/24 18:52:53

目录

前言:

1.变量名称的意义

2.卖函数库的知识

3.变长数组

4.清空输入缓冲区

5.左值和右值

6.for控制语句中定义变量

7.刷题中浮点数的精度问题

8.C语言提供C的标准和C库的约定

9.extern声明外部符号


❤博主CSDN:啊苏要学习

  ▶专栏分类:C语言◀

  C语言的学习,是为我们今后学习其它语言打好基础,C生万物!

  开始我们的C语言之旅吧!✈


前言:

  兜兜转转,经过较长时间的学习、总结出一篇C语言的那些少见的事,各位看官久等了

1.变量名称的意义

  在创建变量的时候,我们通过都被要求起个名字。大家可能不太清楚这个名字的的作用是什么,而只是知道拿起变量名,该怎用就怎么用。

  实际上,变量名是方便我们程序员自己的一个标签。这是为什么呢?首先我们需要知道的一点是:计算机进行操作时,是找到相应地址,对地址内存储的数据进行更改,计算机才不管你给变量起什么名字,名字起的好与坏,是程序员容不容易理解的问题

  我们只需要知道,变量名称标识了一块内存空间,使用变量名,就是在对相应的内存块进行操作,我们不必知道计算机是如何寻址找到那块空间的

  这时候有小伙伴会问?博主那有没有什么办法,既不要给内存空间起名字,又能使用这块内存空间呢?答案是可以的。和往常一样,首先你要向操作系统申请内存空间,第二就是返回指向这块内存空间的指针

  一般这种情况都是在动态内存开辟的时候使用动态内存分配函数malloc、calloc、realloc开辟堆区上的空间,这些函数会返回指向开辟空间的指针,并且这块空间没有名字

2.卖函数库的知识

  在我们掌握了编程的知识后,我们将一些在工作时可能用到的函数,并且库函数里没有,封装在一个自己实现的库里面,将这个库卖给需要的买方当然这个库实现的功能要足够的强大才有人买(doge)

  这里博主给出一个流程,大家看完之后可以去实现一下,方便日后将自己的能力变现

  • 写出函数的.h文件和.c文件

  .h文件放的是函数的声明、.c文件放的是函数的定义(实现函数的文件)由于我们卖库并不想把我们实现函数的思路和代码卖出去,我们需要将声明和定义分开来,这种方法不仅能让买方无法得知我们如何实现函数的

  补充:还有的好处体现在工作的时侯,需要分工协作完成一个项目。我们不可能都在同一个.c文件里写函数,也不可能说,你先写完你那部分的功能,我再打开.c文件写我负责的那一部分所以每个程序员负责的模块都自己写一个.h和.c文件,到最后包含头文件(相当于包含声明)放在一个文件里,将各种函数的实现组装在一起完成任务

  • 改变项目的属性配置

 

  • 调整完成后,ctrl+f5运行起来会生成相应的.lib文件在相应的路径下


这里会报错,不过没关系,这只是因为我们没有用main函数生成可执行程序而已。然后就到相应的路径下查看.lib文件,用记事本打开你会发现里面全是乱码,这是因为它已经是二级制文件了。

  • 将.lib文件和.h文件出售

  因为.lib文件是看不懂的,所以买方根本不知道这里面有什么样的函数,我们顺带把.h文件也卖出去,相当于是.lib库使用的说明书.h文件里面包含着.lib文件里的各种函数声明以及函数的返回类型、函数名、参数、功能描述等

  • 买方买到后如何使用静态库(.lib)

   在编译器头文件里添加现有项.h文件

  添加完之后,要引用头文件,也就是包含函数声明并且要用一句代码导入静态库,就可以使用啦~

  成功啦!以上就是一个过程~


  补充:自己的头文件用""(双引号),库的头文件用<>(尖括号)区别在于,""包含的头文件,编译器先在本地里找文件,找不到再去C库(编译器软件里实现函数的文件)里找。<>包含的头文件,编译器先在编译器软件里找,找不到再到本地里找

3.变长数组

  C99中规定,可以允许我们使用变量当做指定数组元素的个数。如果编译器支持C99标准的话,我们可以实现下面的表示:

int main
{
    int n = 10;
    int arr[n];
    return 0;
}

  其中n是变量,还有一点需要注意的是,变长数组不能进行初始化。 

4.清空输入缓冲区

   清空输入缓冲区,可以使用循环getchar()将输入缓冲区里的内容逐一全部清空,具体实现如下:

int main()
{
    while(getchar() != '\n')
    {
        ;
    }
    return 0;
}

  因为不需要这个循环具体做什么事情,所以我们在循环体里放的是空语句getchar正常读取返回读取到的字符对应的ASCII码值,读取失败返回EOF。scanf正常读取返回读取成功的个数,读取失败返回EOF。 

  另外还可以使用fflush(stdin)函数清空输入缓冲区,但在VS上这个函数的功能被取消了

  冲洗stdin(standard input),清理标准输入流,这样会好记一点

5.左值和右值

  左值和右值的意思分别是:左值是一块空间;右值是一个数值、空间的内容

#include <stdio.h>

int main()
{
    int a = 10;
    const int b = 8;
    a = 20;//a是左值,b是右值,a代表的是可以存放整型的内存空间
    b = 10;//error,这个时候编译器会报错---左值不可被修改
    //因为const修饰的b变量它这块空间里的内容是不能被改变的
    return 0;
}

6.for控制语句中定义变量

  在C99标准中,支持在for循环控制条件初始化部分定义变量

#include <stdio.h>

int main()
{
    //C99标准支持这样创建变量i
    for(int i = 10; i >= 0; i--)
    {
        printf("%d ", i);
    }
    return 0;
}

7.刷题中浮点数的精度问题

  在使用牛客网或力扣进行刷题的时候,往往对于浮点数并没有明确要求使用float还是double类型,float和double的区别是它们所占空间大小不一样,所以对于精度的存储也不一样

  如果对于精度这方面有能力直接看出来的,就用表示对应精度的类型就ok。如果不行我们就让两种类型换着去解题也是可以的,也就是float的精度不能很好匹配就用doubel、或是精度太高了我们就返回去使用float类型对应double类型的输入输出格式是%lf

int main()
{
    float f = 3.2;//在VS下,3.2虽然是单精度的表示
    //但编译器仍看成是double的类型,可以在3.2后面加上f表示是float类型
    float c = 3.2f;//这样就不会有double向float类型装换,精度丢失的警告了
    return 0;
}

  小数3.2在VS编译器下默认是double类型

8.C语言提供C的标准和C库的约定

  我们在使用库函数的时候,经常说函数是C库提供的。实际上,函数的定义并不是由C语言函数库直接实现的,而是由编译器的厂商实现的。比如VS、GCC编译器实现scanf函数

  C库只规定函数的功能、名字、参数和返回值各大厂商根据这个标准去实现库函数,即使在不同编译器中,内部实现库函数的方式可能略有不同,但使用起来的效果是一样的,这就是因为C语言提供了标准形成的局面

9.extern声明外部符号

  在学习关键字extern的时候,extern是用来声明外部符号的。

  然而我们并不一定需要用加extern来声明外部符号glo_bal、Add也可以正常使用的


结语:希望读者读完有所收获!在学C的路上,祝福我们能越来越C!✔

  读者对本文不理解的地方,或是发现文章在内容上有误等,请在下方评论区留言告诉博主哟~,也可以对博主提出一些文章改进的建议,感激不尽!最后的最后!

  ❤求点赞,求关注,你的点赞是我更新的动力,一起努力进步吧。

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

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

相关文章

飞书接入ChatGPT - 将ChatGPT集成到飞书机器人,直接拉满效率

文章目录 前言环境列表视频教程1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 转载自远控源码文章&#xff1a;飞书接入ChatGPT - 将ChatGPT集…

java基础知识——26.反射

这篇文章我们来讲一下java的代理与反射&#xff0c;这是很重要的一部分内容。 目录 1.什么是反射 2.获取class对象的三种方式 3.反射获取构造方法 4.利用反射来获取成员变量 5.利用反射来获取成员方法 6.反射的作用 7.反射小结 1.什么是反射 首先&#xff0c;我们来看…

研报精选230503

目录 【个股230503华西证券_山鹰国际】盈利能力环比改善&#xff0c;消费复苏静待花开 【个股230503华西证券_太平鸟】控折扣下毛利率历史新高&#xff0c;关注Q3货品改善 【个股230503中银证券_南京银行】息差企稳回升 【个股230503华西证券_山鹰国际】盈利能力环比改善&#…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(1)》

《&#xff08;高项&#xff09;备考大全》【专项2】《案例分析 - 计算题》 1 题型全部概况2 时间管理2.1 关键路径法 CMP2.1.1 原理2.1.2 关键路径的基本问题2.1.3 题目7、题目6 - 正推、反推8、题目7 2.2 PERT&#xff08;计划评审技术&#xff09;2.3 活动排序网络图 3 成本…

安卓系统下的截屏和录屏

可以抓取手机屏幕画面&#xff08;屏幕截图&#xff09;&#xff0c;也可以录制屏幕画面视频。拍摄屏幕后&#xff0c;可以查看、编辑和分享所拍的图片或视频。 抓取屏幕截图 打开要抓取的屏幕。视手机情况执行下列一个操作&#xff0c;3种方法看你手机有效的&#xff1a; 同…

linux【多线程】基于环形队列(RingQueue)的生产消费模型

基于环形队列RingQueue的生产消费模型 一、引入二、信号量2.1 信号量概念2.2 信号量PV操作2.3 POSIX信号量接口 三、基于环形队列(RingQueue)的生产消费模型3.1 设计思路3.2 结构设计图3.3 单生产单消费代码实现 四、多生产多消费情形五、小结5.1 多生产多消费的意义5.2 条件变…

docker容器技术

什么是docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现&#xff0c;基于 Linux 内核的 cgroup&#xff0c;namespace&#xff0c;以及 OverlayFS 类的 Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;属于 操作系统层面的虚拟化技术。由于隔离的进程独…

PCL学习三:KD-Tree Octree

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云【量化课堂】KD-Tree系列KD-Tree原理详解 1. 引言 通过激光雷达或双目相机获取到的点云&#xff0c;一般数据量较大且分布不均匀&#xff0c;数据主要表征了目标物表面的大量点的集合&#xff0c;这些离散的点如果希望实现…

七彩虹DDR5主板四根开启XMP教程

七彩虹的D5主板&#xff0c;通常在安装8G2、16G2的情况下是可以正常开启XMP的&#xff0c; 但在16G4、32G2的情况下机会出现XMP超频失败或蓝屏问题 这是由于BIOS优化不足造成的 第一步还是开启XMP&#xff0c;也可以在选择XMP后&#xff0c;切换到用户自定义模式&#xff0c…

Flutter 与第三方 Native-SDK 的交互代理方案

场景 在使用 Flutter 进行功能模块或者整体项目的开发时&#xff0c;如果需要&#xff08;阶段性&#xff09;频繁地和某个第三方 Native-SDK 进行交互&#xff0c;而该 Native-SDK 没有实现 Flutter 插件版本的情况下&#xff0c;如果直接把这部分交互 API 加入到原有的 chan…

最优化方法Python计算:一元函数搜索算法——二分法

设一元目标函数 f ( x ) f(x) f(x)在区间 [ a 0 , b 0 ] ⊆ R [a_0,b_0]\subseteq\text{R} [a0​,b0​]⊆R&#xff08;其长度记为 λ \lambda λ&#xff09;上为单峰函数&#xff0c;且在 ( a 0 , b 0 ) (a_0,b_0) (a0​,b0​)内连续可导&#xff0c;即其导函数 f ′ ( x ) f…

TinyJAMBU的制动原理——一种轻量化的认证密码

关于TinyJAMBU的定义和介绍在另一篇博文已经介绍过了&#xff0c;这里只对其动作原理进行描述和说明。 对应的博文链接如下&#xff1a;TinyJAMBU&#xff1a;一种轻量化密码介绍 首先&#xff0c;该密码是一个流密码体系的块密码框架。其加密模式整体上来看是块密码&#xff0…

P4903 心碎

这是一道洛谷里的题目 难度级别&#xff1a;普及/提高- 题目提供者&#xff1a;大神cyd 题目背景 NOIP2015初赛。CYD大神在他的母校跪掉了。初赛那天&#xff0c;他回到原来的教室参观了一下&#xff0c;发现那张遍布了N个洞的课桌还摆在那里——那是他初中时和XHY同学坐过…

优思学院|8D和DMAIC两种方法应如何选择?

在现代的商业环境中&#xff0c;客户投诉是一个非常常见的问题。当客户不满意产品或服务时&#xff0c;他们往往会向企业发出投诉。质量管理部门是一个负责处理这些投诉的重要部门&#xff0c;因为它们需要确保产品和服务的质量满足客户的期望。改善方法是质量管理部门用来解决…

作为一名程序员,如何写出一手让同事膜拜的漂亮代码?

整洁的代码 有意义的命名 函数命名 变量命名 函数的定义 注释的规范 代码的长度 代码的对齐 我写代码已经有好几年了&#xff0c;最近看了一本书叫做《代码整洁之道》。我发现这本书中介绍的一些内容对我来说非常有启发性。书中提到的一些方法和技巧让我重新审视了自己的…

疑难问题定位案例复盘(三)

今天我们分享一个数据库被异常改写的案例&#xff0c;通过该案例我们可以学习总结出常规的文件被改写问题定位思路。 问题现象 1、测试环境在进行特定压力测试时发现页面登陆异常&#xff0c;且调试日志多个进程持续打印“数据库打开失败”日志。 2、测试环境在进行多个压力测…

Unity教程||Unity添加中文字体||Unity知识记录--制作UI粒子特效

Unity添加中文字体 ## 1、拷贝字体文件 拷贝C:\Windows\Fonts文件夹下&#xff0c;华文细黑常规文件到项目中 ## 2、下载中文字库 链接: https://pan.baidu.com/s/1KW31KB5vEImZHUWvQ9PLEQ 提取码: bgug 3、添加字体字库 选择Window->TextMeshPro->Font Asset Crea…

HTML的基础语法

文章目录 前言一.HTML结构1.1 什么是html语言1.2 html的结构是什么 二.HTML常见标签2.1 文本格式标签标题标签段落标签换行标签格式化标签图片标签超链接标签 2.2 表格标签2.3 表单标签from标签input标签文本框密码框单选框复选框普通按钮提交按钮清空按钮选择文件select标签te…

延迟队列与SpringBoot实战

延迟队列与SpringBoot实战 概念 延时队列,队列内部是有序的&#xff0c;最重要的特性就体现在它的延时属性上&#xff0c;延时队列中的元素是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列 …