1.编译器的选择

我们的c语言是一门,我们写的c语言代码是文本文件(存放在.c为后缀的文件中),文本文件本身无法被执行,必须通过编译器的编译和链接器的链接,生成可执行的二进制文件,才能够被执行

在这里插入图片描述
注意:

  1. 每个源文件(.c文件)通过编译器生成目标文件(后缀为.obj的文件)
  2. 多个目标文件和库文件通过链接器生成可执行文件(.exe文件)
    3.一个工程里面一般会有多个源文件组成

编辑器和集成开发环境的区别
前面说到了我们c语言是一门编译型的语言,需要编译器将其转换成机器能够执行的机器指令

编译器
msvc,gcc,clang是常见的编译器

集成开发环境(IDE)

  • 集成开发环境一般包含代码编辑器,编译器,调试器和图形用户界面等,集成了代码编写功能,分析功能,编译功能,调试功能等一化的开发软件服务套
  • vs2022,XCode,CodeBlocks,Devc++都是常见的集成开发环境

vs2022集成了msvc,安装包大一些,安装简单,无需多余配置,用起来很方便

XCode集成了clang,是苹果电脑上的工具

CodeBlocks集成了gcc,这个工具需要配置,比较小众

Devc++集成了gcc,小巧,但是工具过去简单,对代码风格的养成不好,通常是一些竞赛在使用

2.main函数

每个c语言程序不管是有多少行的代码,都是从main函数开始执行的,main函数是程序的入口,main函数前面的int表示函数结束的时候要返回一个整型类型的值,所以在main函数的最后写return 0,正好前后呼应
在这里插入图片描述

  • main函数是程序的入口
  • main函数有且只能有一个
  • 即使是一个项目里面有多个.c文件,也只能有一个main函数(因为程序的入口只有一个)

main函数的写法

  1. 这是main函数过去的写法
    在这里插入图片描述
  2. void表示main函数不接受任何的参数
    在这里插入图片描述
  3. 有参数的main函数
    在这里插入图片描述
    如果不想使用main函数的参数,可以不写,这些参数就是多余的,等到需要的时候再写

3.printf和库函数

printf函数

printf是一个库函数,功能是在标准输出设备上(一般指屏幕)上进行信息的打印
在这里插入图片描述

库函数

为了不再重复实现常见的代码,提高程序员的开发效率,c语言标准规定了一组函数,这些函数由不同的编译器实现,供程序员使用,这些函数组成了一个库叫做标准库,这些函数也被称为库函数
一个系列的库函数一般会声明在同一个头文件里面,所以库函数的使用,要包含对应的头文件,比如stdio.h文件里面就是关于标准输入输出的函数

4.字符和ASCII编码

在键盘上可以敲出各种的字符,a,@,#等都是字符,c语言中字符用单引号引起来,我们都知道我们的数据是以二进制的形式存储的,我们一般会给字符进行二进制编号,给每一个字符编一个二进制序列,这就叫做编码
但是每个人对字符进行编码的序列会因人而异,为了统一,不造成混乱,美国国家标准学会出台了一个标准ASCII编码
在这里插入图片描述

当我们想打印一个字符的时候,我们可以直接用字母进行打印,也可以用该字符对应的ASCII的值来表示(如下图)
在这里插入图片描述

注意:

  1. 字符A到Z的ASCII值是从65到90
  2. 字符a到z的ASCII值是从97到122
  3. 对应大小写字符(A和a)的ASCII差值是32
  4. 数字字符0到9的ASCII值是从48到57
  5. 换行\n的ASCII值是10
  6. 这些字符中ASCII值从0到31的这31个字符是不可打印字符,无法在屏幕上观察

5.字符串和\0

在c语言中字符串是用双引号引起来的,字符串的打印格式是%s
在c语言的字符串中,字符串比较特殊,在字符串的末尾隐藏着一个\0,是字符串结束的标志,函数printf和strlen都是根据\0来判断字符串是否结束的
在这里插入图片描述
在这里插入图片描述
如上图我们以这种方式创建字符串,后面是有\0的
在这里插入图片描述
在这里插入图片描述
如果用上图的方法来创建字符串的话就没有隐藏的\0,于是这种情况在使用printf函数的时候,就会打印出一段乱码才会停下,因为此字符串没有\0,printf不知道字符串什么时候结束,直到打印到内存中其他的\0的位置才能停下(如下图)
在这里插入图片描述

如果我们手动的给这个字符串加上\0的话,问题也就被解决了
在这里插入图片描述

如果我们打打印字符串的时候字符串的中间有\0的话,字符串的打印也会提前结束(如下图)
在这里插入图片描述

6.转义字符

转移字符顾名思义就是转变原来字符的意思
比如我们的字符n,原来的意思就是一个简单的字母n,前面加上\了以后,就转变了原来的意思,变成换行的意思了

转义字符作用
\?在书写多个问号的时候,防止他们被解析成三字母词,比如我们要打印( are you ok??)的时候,??)就会被解析成],于是我们就在?的前面加上/,于是就将三字母词里的问号转化成了一个普通的问号,在这里问号的意思被转变了(如下图)在这里插入图片描述
\’表示字符常量‘,当我们想要打印一个’的时候,三个‘的时候会报错,我们希望前后两个’组成一队,打印中间的‘,但是实际上前两个’会组成一对,把最后一个‘剩下,于是程序就报错了,所以我们需要中间的’只表示单纯的字符,而不是字符两边的单引号在这里插入图片描述在这里插入图片描述
\”跟单引号是同理的
\\用于表示一个反斜杠,防止它被解析成转移字符在这里插入图片描述 、、、、、 我们的本意是要打印c:\test\ddd\test.c的但是\t是转移字符在这里插入图片描述打印出来如上图所示,为了\不表示转移字符里面的\,只是表示普通的\,我们在\的前面再加上一个\,将转移字符的斜杠转换为普通的斜杠在这里插入图片描述
\a警报,这会使得终端发出警报声或者出现闪烁,或者两者同时发生
\b退格符,光标回退一个字符,但是不删除字符 在这里插入图片描述如上图我们使用getchar函数输入一个字符的时候,光标是在f的后面的,但是当我们在字符串后面加上\b的时候,光标会后退一位,也就是落在f前面,当getchar输入字符的时候,就会将f给覆盖掉在这里插入图片描述
\r回车符,光标会移动到同一行的开头,同样的我们输入一个字符同样也会将这一行的第一个字符给覆盖掉在这里插入图片描述
\t制表符,光标移动到下一个水平制表符位,,也就是移动到下一个\t长度的倍数处,通常是4\8的倍数
\dddddd表示一到三哥八进制的数字,表示将ddd转换成十进制在ASCII表里面对应的字符,如\130就代表字符x在这里插入图片描述
\xdddd表示两个十六进制数字,表示将dd转化为十进制在ASCII表里面对应的字符,比如\x30表示0在这里插入图片描述

\0其实是\ddd类的转义字符,0转换为十进制也是0,对应的ASCII表里面编号为0的字符,但是由于\0标志着字符串的结束,所以0编号处的字符是不存在的,是空的

7.注释

在编译的时候,注释会被替换为空格,比如min/*这是一个注释*/Value在编译之后会变成min Value,而不是minValue

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

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

相关文章

Rust赋能美团云原生DevOps实践

Rust 云原生 DevOps 实践 在云原生环境中,Rust 的高性能与安全性使其成为构建微服务和基础设施工具的理想选择。Docker 作为容器化标准工具,结合 Rust 的跨平台特性,可高效实现持续集成与部署(CI/CD)。 构建优化的 Rust Docker 镜像 多阶段构建是 Rust 项目容器化的关键…

计算机网络实验——配置ACL

ACL基础一、实验目的1. 配置H3C路由器基本ACL。二、实验要求1. 熟练掌握网络配置能力。2. 熟练掌握ACL基本配置。三、实验步骤(1)使用reset saved-configuration命令和reboot命令,重置路由器原有配置,如图1所示。图 1(…

在本地部署mcp服务器实现自然语言操作mysql数据库,轻松实现数据表的增~ 删~ 改~ 查~

1.将写好的mcp_server代码放在本地任意盘! import asyncio import logging import os import sys from mysql.connector import connect, Error from mcp.server import Server from mcp.types import Resource, Tool, TextContent from pydantic import AnyUrl# Co…

2025快手创作者中心发布视频python实现

难度还行,只有一个__NS_sig3加密,流程麻烦点cookies_list cookie.split("; ")cookie_dict {}# 遍历每个 Cookie,根据等号将键值对拆分并添加到字典中for cookie in cookies_list:key_value cookie.split("")if len(ke…

Android 组件内核

文章目录什么是binder1. 什么是Binder?2. Binder架构组成3. 工作原理与通信流程1)服务注册2)服务查询3)通信过程4)核心数据结构4. 关键技术点5. 常见面试考点1)Binder与传统IPC(Socket、管道、共…

java类加载机制:Tomcat的类加载机制

Tomcat类加载机制深度解析:打破双亲委派的Web容器实现 Tomcat作为Java Web容器,其类加载机制为满足Web应用的隔离性、热部署和兼容性需求,对标准Java类加载机制进行了定制化扩展,核心是打破双亲委派模型并引入多层级类加载器。以下…

【PTA数据结构 | C语言版】从顺序表 list 中删除第 i 个元素

本专栏持续输出数据结构题目集,欢迎订阅。 文章目录题目代码题目 请编写程序,将 n 个整数存入顺序表,对任一指定的第 i 个位置,将这个位置上的元素从顺序表中删除。注意:i 代表位序,从 1 开始,…

VS2022 C++ EasyX库 扫雷游戏项目开发:打造经典游戏的详细之旅

老样子,先上效果 视频演示 C经典扫雷-介绍一、引言 在这篇博客中,我将详细介绍扫雷游戏项目的开发过程。扫雷作为一款经典的游戏,其规则简单但富有挑战性。通过开发这个项目,我不仅加深了对 C 编程的理解,还提升了自己…

Go语言网络游戏服务器模块化编程

本文以使用origin框架(一款使用Go语言写的开源游戏服务器框架)为例进行说明,当然也可以使用其它的框架或者自己写。 在框架中PBProcessor用来处理Protobuf消息,在使用之前,需要使用Register函数注册网络消息&#xff…

【机器人】Aether 多任务世界模型 | 4D动态重建 | 视频预测 | 视觉规划

Aether 是一个的世界模型,整合几何重建与生成建模的统一框架,实现类人空间推理能力。 来自ICCV 2025,该框架具有三大核心功能: (1) 4D动态重建,(2) 动作条件视频预测, (3) 目标条件视觉规划。 代码地址&…

MiniMind:3小时训练26MB微型语言模型,开源项目助力AI初学者快速入门

开发|界面|引擎|交付|副驾——重写全栈法则:AI原生的倍速造应用流来自全栈程序员 nine 的探索与实践,持续迭代中。 欢迎关注评论私信交流~ 在大型语言模型(LLaMA、GPT等)日益流行的今天,一个名为…

相机Camera日志实例分析之五:相机Camx【萌拍闪光灯后置拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…

[2-02-02].第03节:环境搭建 - Win10搭建ES集群环境

ElasticSearch学习大纲 基于ElasticSearch7.8版本 一、ElasticStack下载: 1.Elasticsearch 的官方地址 2.Elasticsearch 下载地址: 二、集群搭建: 第1步:创建es目录: 1.创建 elasticsearch-cluster 文件夹,在内部…

操作系统核心技术剖析:从Android驱动模型到鸿蒙微内核的国产化实践

目录 一、移动端操作系统技术细节 1. Android 内核版本 核心模块 驱动架构 国内定制案例 2. iOS XNU内核关键模块 安全机制 3. HarmonyOS 多内核架构 驱动隔离 二、PC端操作系统技术细节 1. Windows NT内核 模块分层 驱动模型 国内适配 2. macOS(X…

整合Spring、Spring MVC与MyBatis:构建高效Java Web应用

本文将详细讲解如何整合Spring、Spring MVC和MyBatis(SSM框架),通过一个人员信息查询案例展示完整开发流程。所有代码基于提供的文件实现。一、项目结构src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── qcb…

视频插帧技术:从流畅观影到AI创作的革命

一、起源:为什么需要视频插帧? 视频的本质是连续播放的静态帧序列,帧率(FPS) 决定了流畅度。早期电影受限于拍摄技术和存储成本,普遍采用24FPS,而现代显示设备(如120Hz屏幕&#xf…

【一起来学AI大模型】PyTorch 实战示例:使用 BatchNorm 处理张量(Tensor)

PyTorch 实战示例 演示如何在神经网络中使用 BatchNorm 处理张量(Tensor),涵盖关键实现细节和常见陷阱。示例包含数据准备、模型构建、训练/推理模式切换及结果分析。示例场景:在 CIFAR-10 数据集上实现带 BatchNorm 的 CNNimport…

第8章:应用层协议HTTP、SDN软件定义网络、组播技术、QoS

应用层协议HTTP 应用层协议概述 应用层协议非常多,我们重点熟悉以下常见协议功能即可。 Telnet:远程登录协议,基于TCP 23端口,用于远程管理设备,采用明文传输。安全外壳协议 (SecureShell,SSH) ,基于TCP 22端口,用于…

uniapp页面间通信

uniapp中通过eventChannel实现页面间通信的方法,这是一种官方推荐的高效传参方式。我来解释下这种方式的完整实现和注意事项:‌发送页面(父页面)‌:uni.navigateTo({url: /pages/detail/detail,success: (res) > {/…

Android ViewModel机制与底层原理详解

Android 的 ViewModel 是 Jetpack 架构组件库的核心部分,旨在以生命周期感知的方式存储和管理与 UI 相关的数据。它的核心目标是解决两大痛点: 数据持久化: 在配置变更(如屏幕旋转、语言切换、多窗口模式切换)时保留数…