1.《C语言》—— [常见概念]

前言: 

        C语言是学习编程的一门语言,C语言概念少,词汇少,包含了基本的编程元素,再后来的很多语言如(C++,Java)等都参考了C语言,所以想要学好编程,C语言是必不可少的一门,而且C语言的热门程度也是占据前首。

1.C语言是什么

        在我们日常生活中人与人交流的语言为自然语言,如:汉语,英语等。那么人与计算机交流就需要计算机语言,我们已经知道了世界上计算机语言存在多种,C语言只是其中的一门编程语言。当然有句话为——"C生万物",所以C语言是一门重要的编程语言。

        C语言最初是作为Unix系统的开发工具而发明的。

2.编译和链接 

        C语言是一门编译型计算机语言,C语言中源代码都是文本文件,文本文件是无法被执行,要通过编译器的编译和连接器的链接,才可生成二进制的可执行文件,最终文件才能被执行。C语言代码是放在.c为后缀的文件中的,要得到最终的可执行程序,就需要经过编译和链接两个过程。每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj)为后缀的文件。多个目标文件和库文件经过连接器处理生成对应的可执行文件(.exe)文件。

        那么也可以在电脑中找到对应的文件,使用文本打开方式,就可以观察。

3.编译器的对比 

        那么我们大概了解了编译和链接,我们也知道C语言是一门编译型的计算机语言,那么我们需要依赖什么编译器将计算机语言转换成机器能够执行的机器指令?,以下是我们常见的C语言编译器。 

如:MSVC / clang / gcc 这些都是常见的编译器,也有一些集成开发环境如:VS2022 / DevC++ / clion / XCode / CodeBlocks 等等。

那么什么是集成开发环境(IDE),集成开发环境是用于提供程序开发环境的应用程序,一般包含了代码编辑器,编译器,调式器和图形用户界面等工具,是集成了代码的编写功能,分析功能,编译功能,调式功能等一体化开发软件。

*VS2022集成了MSVC:安装包比较大,安装也简单,无需要多余的配置,使用起来也非常方便

*XCode:集成了clang(苹果电脑上的开发工具)

*CodeBlocks:集成了gcc(比较小众,需要配置环境)

*DevC++:集成了gcc(小巧,过于简单,适合一些竞赛使用)

*Clion:是默认使用CMake,编译器可以配置(要收费)

那么相较于我比较推荐使用vs2022,因为”好吃又实惠“,下载就下社区版。

Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)

4.写第一个C语言程序

1.创建项目 

那么我们使用vs2022,来编写第一个C语言代码,先创建项目。 

创建新项目

  语言选择C++因为 C和C++不分家,选择空项目,然后下一步  

项目名起得有意义就可,文件位置放在知道的地方就可

如果进来左边或者右边没有解决方案管理器,可以点击视图,然后点击解决方案资源管理器,就会出现了

点击源文件,然后添加,选择新建项

如果出现这个,点击显示所有模板

选择C++文件,名称为xxx.c为后缀,添加

我们可以看到生成了一个.c为后缀文件,说明创建成功。

2.打印"hello C语言"

我们可以写一个简单代码,在屏幕上输出  "hello C语言"  ,那么我们运行代码可以点击上面绿色的箭头,或者使用键盘Ctrl+F5 或Ctrl+Fn+F5 代码就可以成功运行。

我们可以看到一些不认识的代码,对于第一行的代码可以先忽略。那么其他代码我们该如何去理解?接下来我们就把代码拆分。

#include<stdio.h> :include意思为"包含" , std是standard的缩写意为"标准的" , i为input的缩写意为"输入" , o为output的缩写意为"输出" , .h为header意为头文件。  

int main() :int 为整型 , main是主函数,()为函数参数。 

{} :两个花括号包含着代码。 

return 0 :表示返回,当然你也可以返回1,2...,但是返回0表示为正常返回。

3.main函数

        每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口main函数也称为:主函数。main函数前面的int表示main函数执行结束后返回一个整型int的值。所以main函数的最后写上return 0 ;

1.main函数是程序的入口

2.在源文件中main函数有且只有一个

如何解释main函数是程序的入口?我们可以通过调式看到箭头开始指向的是main函数第一行,所以main函数为程序的入口。

那么如何理解main函数有且只有一个? 当我多写了一个main函数,可以看到报了错误,所以也验证了main函数有且只有一个。

4.printf函数和库函数

        在上边的代码我们可以看到,要想打印"hello C语言",我们需要使用了一个函数为printf函数。我们可以简单了解一下printf函数,printf函数是一个库函数,它的功能为在标准输出设备上进行信息的打印。printf函数也可以打印其他类型的数据。 

我们可以简单说明一下printf函数:

1.printf函数的print意为打印的意思,f为format格式。你打印数据时,可以指定相对的格式,如果我想打印100,100为整型那么需要用%d , 打印3.14浮点数,需要用%f 。

 那么我们也可以有不一样的打印方式,在这里先简单了解一下 。 

那么前边已经说明了printf函数是一个库函数。在使用库函数的时候,是需要包含对应的头文件的,如:printf函数需要包含的头文件为

#include<stdio.h>

什么是库函数? 

       库函数为:为了不再重复实现常见的代码,让程序员提高开发效率 ,C语言标准规定了一组函数,这些函数由不同的编译器厂商根据C语言标准进行函数的实现,提供给程序员使用,这样程序员不在需要进行其他的操作去实现代码,只需要引用对应的头文件,就可以进行函数的使用。这些函数组成了一个库函数,被称之为标准库。

库函数很多,在cpluscplus可以参考   C library - C++ Reference (cplusplus.com)

5.关键字的介绍

        什么是关键字?

1.关键字有着特殊的意义,是保留给C语言使用的 

2.在我们写代码需要创建标识符时,是不能和关键字重复的 

3.关键字是不能自己创建

在C语言中关键字有32个: 

我们如何去理解第1点?

下图我们可以了解这些关键字是可以实现一些场景的,所以我们是不能够在创建标识符与关键字重复。

如何理解第2点?

        我们可以通过代码看到,我们创建的名字是不能和关键字重名的。我们也能理解为在古代当代帝王及本朝历代皇帝之名进行避讳,所以我们创建的标识符也要和关键字避违。

如何理解第3点? 

        这些关键字我们自己是不能够创建的,C语言规定好,就像生活中有些事能做,而有些不能做一个道理。 

        如果对关键字感兴趣也可以在这里看到:C 关键词 - cppreference.com

6.字符和ASCll码

        什么是字符?字符其实就是我们在键盘上可以敲出来的各种字符,如:a,b,c,%,#等等,那么C语言中字符是需要英文单引号括起来如: ' a ' , ' b ' ,' c ' 等。

什么是ASCll码 ? 
        在计算机中所有的数据存储都是以二进制的形式,那这些字符在内存中是如何存储?后来美国国家标准学会(ANSI)出了一个标准的ASCll编码,这些字符都对应着ASCll编码的值,C语言中字符就遵循着ASCll编码的方式。 

1.字符A~Z的ASCll码值从65~90 

2.字符a~z的ASCll码值从97~122

3.对应的大小写字符(如:a和A)的ASCll码值相差值32

4.数字字符0~9的ASCll码值从48~57

我们可以将这些字符打印来观察,如果是打印字符就用%c ,整型就是%d,来指定打印的格式。 

我们也可以把上图的ASCll码值打印出来,但是0-31的ASCll码值是不能够被打印出观察。

那么关于ASCll码值就简单介绍到这里,也可以在cpluscplus上了解更多https://zh.cppreference.com/w/cpp/language/ascii

7.字符串和\0

        前边我们已经知道了在C语言中表示字符用英文的单引号,那么如何表示字符串? 
其实是使用英文双引号括起来的一串字符就被称为字符串,如:"abcd"就是一个字符串 。那么打印字符串用的指定格式为%s。 

那么字符串和'\0'它们之间有什么关系? 
我们可以通过调式可以知道原来字符串"abcd"末尾还隐藏存放着一个'\0' ,那么'\0'存在的意义是什么其实,'\0'是字符串的结束标志,当我们在使用printf库函数或者使用strlen函数计算字符串的长度时,遇到'\0'就自动停止了。所以'\0'是字符串的结束标志。 

那么我们如何验证'\0'是字符串的结束标志? 

我创建了2个数组,一个名为ch1,另一个为ch2,我们经过调式可以看到ch1数组是隐含着'\0'的,但是ch2是没有'\0' 。

我们前边说过'\0'是字符串结束的标志,那么我们把ch1和ch2这2个数组打印在屏幕上观察,我们可以看到为什么ch1正常打印在屏幕上,但是ch2却打印出乱码? 

我们可以这样理解 

数据是存放在内存空间的那么ch1字符数组和ch2字符数组是两个不一样的内存空间,ch1字符数组中的字符串是隐含着'\0'所以在打印时,遇到'\0'就会自动停止,但是ch2字符数组中是没有'\0'的,为了让打印停止它需要找到'\0' ,所以在寻找的过程中也会打印出内存中的值,因为在这寻找的过程中会这一块内存不仅仅只有ch2。

那么只要我们在ch2数组中加入\0 , 这样在打印的时候遇到 \0 就会停止

8.转义字符

        什么是转义字符?其实在我们前边的代码中就运用到了转义字符,如字符'n'是原来的字面意思,但是我加了个'\' ,变为了'\n' , 那么'\' 就会把原来的字符'n',转变为了'\n'为换行的意思。 

那么C语言中都有哪些转义字符? 

具体有以下: 

那么如何理解? 我们一个一个来  

1.\a 

当打印出来时,会发出系统的响铃

2.\b 

退格键,光标会回退一个字符,也就是回退一格

  3.\f

换页,将当前的光标位置移动到下一行起始位置

4.\n

换行,将当前位置移动到本行开头

5.\r

将当前的位置,移动到本行开头

6.\t 

水平制表符,跳到下一个Tab的位置,C语言中Tab是可以修改的可能是4或者8,这里一个Tab是8个空格

7.\v

垂直制表符,用的不多

8.\'

代表一个单引号

9.\"

代表一个双引号,如果我想打印一个双引号,是不行的会报错,那么加\ , 转义字符就可以打印出来

 

10.\

把斜杠\,转义成斜杠\

11.? 

转义为问号 ,在一些编辑器中3个???打印出来的效果为??】,会把最后一个?变为方括号。所以加斜杠\ , 可以转义成 三个问号 ???

12.\0

空字符(NULL)

13./ddd 

ddd表示1~3个八进制的数字 

130是8进制,转换成10进制为88,88对应的ASCll码值为X

14./xhh 

hh 表示2个十六进制的数字 

30的十六进制数为48,对应的ASCll码值为0 

9.注释

在C语言中我们写代码,如果遇到不需要的可以进行注释掉,那么应该如何进行注释? 

当我们遇到不需要的代码我们可以在前面加2个斜杠//就可以进行注释,但是只能注释一行

或者加/**/,可以注释一行或者多行

有2种注释的方法,/**/比较老一点而且注释如果不注意会有问题,如我在中间末尾加了*/ , 那么下边的*/ 就没有和它匹配的,就会报错

一般来说建议用2个斜杠 // 这样可以注释更加安全,在vs2022中的上边也有注释键

那么其实2个斜杠 // ,也是可以注释多行代码的,只要我们选中就可以,可以使用上边的注释键进行注释,或者使用快捷键注释Ctrl + K + C , 快捷键取消注释Ctrl + K + U  

 完!                 

          

          

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

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

相关文章

77、WAF攻防——权限控制代码免杀异或运算变量覆盖混淆加密传参

文章目录 WAF规则webshell免杀变异 WAF规则 函数匹配 工具指纹 webshell免杀变异 php 传参带入 eval可以用assert来替换,assert也可以将字符串当作php代码执行漏洞 php 变量覆盖 php 加密 使用加密算法对php后门进行加密 php 异或运算 简化:无字符webshellP 无数字字母rc…

《米小圈上学记》——让孩子爱上阅读一点也不难!

阅读能力的培养是小学语文素质教育重要的组成部分&#xff0c;阅读能力的高低&#xff0c;直接关系到学生的理解能力、运用知识的能力以及表达能力的提升。提高小学生的阅读能力不仅关系到小学生语文素养的培养&#xff0c;而且对他们开阔视野、提高内涵、增加底蕴、放飞心灵有…

hibernate执行外部sql

开发背景 公司多年前项目&#xff0c;使用hibernate作为持久层&#xff0c;部分sql查询采用spring的JdbcTemplate&#xff0c;sql穿插在java代码中。因此&#xff0c;需要统一使用hibernate&#xff0c;并且sql部分需要类似Mybatis一样从文件中读取。由于引入Mybatis需要对项目…

哈希存节点,双dp数组存选和不选

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连…

Linux:安装zabbix-agent被监控端(2)

本章是结合着上一篇文章的续作 Linux&#xff1a;部署搭建zabbix6&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/137426966?spm1001.2014.3001.5501本章将在两台centos部署agent端&#xff0c;然后使用server进行连接监控 agent1 在1…

11、子串-滑动窗口最大值

题解&#xff1a; 双端队列是一种特殊的队列&#xff0c;允许你在队列的两端进行插入和删除操作。在滑动窗口问题中&#xff0c;我们使用它来存储可能是当前窗口最大值的元素的索引。 维护队列的顺序&#xff1a; 当新元素进入窗口时&#xff0c;我们将它与队列尾部的元素进…

RSA相关学习存档

什么是RSA&#xff0c;以及RSA算法&#xff1a; https://zhuanlan.zhihu.com/p/450180396 https://blog.csdn.net/m0_51607907/article/details/123884953 https://blog.csdn.net/firechungelaile/article/details/39974379 https://blog.csdn.net/lesczx/article/details/…

【LeetCode热题100】4. 寻找两个正序数组的中位数(二分)

一.题目要求 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 二.题目难度 困难 三.输入样例 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3…

子集(迭代)(leetcode 78)

核心逻辑&#xff1a; 根据子数组包含的元素个数迭代&#xff1a; 现有子集的基础上通过添加这个新元素来翻倍子集的数量 f(n)2f(n−1) vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;int i,j,k;ans.p…

《科技创业月刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a;问&#xff1a;《科技创业月刊》是什么级别的刊物&#xff1f; 答&#xff1a;省级&#xff0c;主管单位&#xff1a; 湖北省科学技术厅 &#xff1b;主办单位&#xff1a;湖北省科技信息研究院 问&#xff1a;《科技创业月刊》是c刊吗&#xff1f; 答&…

spring面试八股

常用的注册bean的方式 ComponentScan扫描到的service和Controller等的注解 Configration配置类或者是xml文件的定义。 spring中有几种依赖注入的方式 1.构造器注入。 2.setter方法注入。 3.使用field属性的方式注入。 applicationContext是什么 spring bean spring aop Aop…

Linux命令-dpkg-deb命令(Debian Linux下的软件包管理工具)

说明 dpkg-deb命令 是Debian Linux下的软件包管理工具&#xff0c;它可以对软件包执行打包和解包操作以及提 供软件包信息。 语法 dpkg-deb(选项)(参数)选项 -c&#xff1a;显示软件包中的文件列表&#xff1b; -e&#xff1a;将主控信息解压&#xff1b; -f&#xff1a;把…

java种Hutools常用方法

目录 一、依赖二、Convert三、DateUtil四、StrUtil五、ReflectUtil六、IdUtil七、RandomUtil八、BeanUtil九、JSONUtil Hutool是一个小而全的Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;使Java拥有函数式…

2-django、http、web框架、django及django请求生命周期、路由控制、视图层

1 http 2 web框架 3 django 3.1 django请求生命周期 4 路由控制 5 视图层 1 http #1 http 是什么 #2 http特点 #3 请求协议详情-请求首行---》请求方式&#xff0c;请求地址&#xff0c;请求协议版本-请求头---》key:value形式-referer&#xff1a;上一次访问的地址-user-agen…

【算法-数组】移除元素

这里写自定义目录标题 暴力解法双指针思路 leecode27 : https://leetcode.cn/problems/remove-element/submissions/521113648/ 暴力解法 循环匹配&#xff0c;每次匹配到就将数组匹配到的元素的后面元素向前移动一位 【注意】 注意最后一位元素&#xff0c;避免数组越界 pu…

tcp/ip细节

主动方: 发送fin进入fin_wait1,收到fin的ack进入fin_wait2&#xff0c;发送fin时接收缓冲区还有数据 - 应用层不读数据你就close?发reset告知对端你出问题了 默认&#xff1a;linger关闭&#xff0c;close调用立即返回(发出发送缓冲区未发出数据和fin后) linger开启&#xff0…

Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑

Sora 是什么&#xff1f; 2024年2月16日&#xff0c;OpenAI 在其官网上面正式宣布推出文本生成视频的大模型Sora 这样说吧给你一段话&#xff0c; 让你写一篇800字的论文&#xff0c;你的理解很可能都有偏差&#xff0c;那么作为OpenAi要做文生视频到底有多难&#xff0c;下面…

【从零到一手撕脚手架 | 第三节】项目集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged

【从零到一手撕脚手架 | 第三节】项目集成CommitLIntESLintPrettierStyleLintLintStaged Hello大家好我是⛄&#xff0c;前两节教大家如何初始化一个脚手架项目以及如何封装Vue技术栈常用的工具库。本小节教大家如何向我们的脚手架中配置ESLint、Prettier、StyleLint、LintStag…

科研学习|研究方法——扎根理论三阶段编码如何做?

一、背景介绍 “主题标引”意指对文献内容进行分析, 然后对文献所表达的中心思想、所讨论的基本问题以及研究的对象等进行提取, 以形成主题概念, 然后在此基础上把可检索的主题词表示出来, 再将这些主题词按一定顺序 (如字顺) 排列, 对论述相同主题内容的文献加以集中, 从而提高…

Linux下场景模拟--cpu、内存打满测试

Linux下场景模拟–cpu、内存打满测试 打满CPU占用 编写脚本vi /root/cpu_run_full.sh vi /root/cpu_run_full.sh填写如下内容&#xff1a; #!/bin/bash function while_run_cpu() {while true;doi2;done }function cpu_full() {for ((i0; i<$1; i));dowhile_run_cpu &am…