c语言初识

在这里插入图片描述

学c注意事项

我写了很多服务器的代码,我怕有些人看不懂所以就写了这篇入门篇。
学习c语言要多动手,多练习,其实语法就几个,你了解了就会写出自己想要的代码,你不要怕不会写不出程序,因为大部分代码都有人写好,你去github和csdn会抄就行,前提是你会读懂c代码而且要知道编译流程和代码逻辑即可

第一步安装编译环境,建议装qt,c和c++相互兼容的所以别担心。可以csdn找一个qt安装链接下载,别担心装错,装错还能卸载的,学习要放下心理负担,勇于尝试。

c就几个点,内存,地址,结构体,函数,数据类型,循环,判断语句,写起来就像拼积木一样,一层层建起来

1. C语言是个啥?为啥要学它?

简单来说,咱们人跟人唠嗑,用的是中文、英文这些"自然语言"。那想让电脑听咱们的话,干活呢?就得用"计算机语言"。

C语言,就是众多计算机语言里的一位"老前辈"(诞生于上世纪70年代!),但绝对是"老当益壮"!

为啥推荐你学?

  • 根基牢固: 很多流行的语言(C++, Java, Python等)都跟它有血缘关系。学好C,能帮你理解计算机底层是怎么跑的(比如内存怎么玩),以后学别的语言也更快。
  • 运行贼快: C语言执行效率高,像操作系统(Windows/Linux核心)、游戏引擎、单片机(你的智能手表里可能就有)这些追求速度的地方,都少不了它。
  • 面试加分: 不少大厂面试,还会问C语言基础,考察你的计算机功底。

总之,学C不亏,入门不难!

2. 来,整一个!你的第一个C程序

学习编程的"国际惯例",就是先让电脑说"Hello"。这能帮你快速检查环境搭好没,顺便熟悉下C代码长啥样。

“Hello, World!” 代码 (hello.c)

// 这是一个注释,告诉我们下面这行是干啥的
#include <stdio.h> // 告诉编译器:我要用标准输入输出库里的东西// 每个C程序都从这里开始跑,这是"主干道"!
int main() {// 这句话就是让电脑在屏幕上打印 "Hello, C Language!"// printf 是一个现成的"喇叭"函数,专门用来输出信息printf("Hello, C Language!\n"); // \n 的意思是说完这句话换个行// 程序顺利跑完,告诉操作系统"一切OK",返回0return 0;
}

代码大白话解释:

  • #include <stdio.h>:像是在说:“喂,编译器老兄,帮我把那个叫 stdio.h 的工具箱(头文件)拿过来,里面有我待会儿要用的工具(比如 printf)。”
  • int main() { ... }:这就是程序的"启动按钮"和"主舞台" (main 函数)。电脑拿到你的代码,第一个就找 main,然后从 { 开始,一句一句往下执行,直到 } 结束。int 表示这个 main 舞台剧表演完,会给出一个整数作为"演出评分"(return 0 就是"完美落幕"的意思)。
  • printf("Hello, C Language!\n");:这就是演出的核心内容——调用 printf 这个"大喇叭",把双引号 “” 里的内容喊出来。\n 是个特殊暗号,告诉喇叭喊完记得换行,别粘在下一句了。别忘了最后那个分号 ;,它就像中文的句号,告诉编译器:“这句话说完了!”
  • return 0;:演出结束,谢幕,给个好评(返回0)。

怎么让它跑起来?(编译和运行)
你需要一个C语言编译器(比如 GCC)。在你的终端或命令行里:

编译 (把代码翻译成电脑能懂的机器码):
建议用编译器编译,比如qt简单快捷不用手戳,下面这个是Linux的看看就好

gcc hello.c -o hello
  • gcc: 喊一下编译器大佬。
  • hello.c: 告诉它你的剧本(源代码)是哪个文件。
  • -o hello: 让它把翻译好的执行文件(程序)取名叫 hello (Windows 下可能会自动变成 hello.exe)。

运行 (让程序跑起来):

  • Linux / macOS: ./hello
  • Windows: hello.\hello.exe

如果一切顺利,你屏幕上就会出现:

Hello, C Language!

“Hello, World!” 流程图

graph TDA[开始] --> B(引入 stdio.h 工具箱);B --> C{进入 main 函数主舞台};C --> D[用 printf 喇叭喊出 "Hello, C Language!" 并换行];D --> E[演出成功, 返回 0];E --> F[结束];

测试案例 1:

  • 代码: 上面的 hello.c
  • 操作: 编译并运行。
  • 预期输出: Hello, C Language!

耶!你已经成功和C语言打了个招呼!

3. 编程的积木:数据类型与变量

程序要处理各种各样的数据,比如数字、字母。为了让电脑知道怎么存、怎么用这些数据,C语言规定了不同的 数据类型 (Data Types)

常见的"积木"类型:

  • int:用来装 整数 (integer),比如 1, 100, -5。
  • float:用来装 带小数点的数 (单精度浮点数),比如 3.14, -0.5。精度要求不高时用。
  • double:也是装 带小数点的数 (双精度浮点数),比 float 装得更精确,用的也更多。
  • char:用来装 单个字符 (character),比如 ‘A’, ‘b’, ‘?’。注意要用 单引号 ’ ’ 括起来。

有了类型,我们就可以创建 变量 (Variables) 了。变量就像一个 带标签的盒子,你可以给盒子起个名字(变量名),并规定这个盒子只能装哪种类型的数据。

创建变量(声明变量):

数据类型 变量名; // 格式

例子:

int age;        // 创建一个叫 age 的盒子,只能装整数
float price;    // 创建一个叫 price 的盒子,只能装单精度小数
char grade;     // 创建一个叫 grade 的盒子,只能装单个字符

给变量装东西(赋值 & 初始化):

// 先声明,后赋值
int age;
age = 18; // 把 18 这个整数放进 age 盒子里// 声明的同时就给个初始值(推荐!)
float price = 99.9f; // 把 99.9 放进 price 盒子里 (f表示这是个float)
char grade = 'A';    // 把 'A' 这个字符放进 grade 盒子里
double pi = 3.14159; // 把 3.14159 放进 pi 盒子里

变量名的规矩(命名规则):

  1. 只能用字母、数字、下划线 _。
  2. 第一个字符不能是数字。
  3. 大小写敏感 (age 和 Age 是两个不同的盒子)。
  4. 不能用C语言的"保留字"(关键字,后面会说)做名字。

看看这些盒子占多大地方 (sizeof)

不同的数据类型,在电脑内存里占的空间大小(字节数)可能不一样。我们可以用 sizeof 这个"尺子"来量一下。

测试案例 2:变量和它们的大小 (datatypes.c)

#include <stdio.h>int main() {int age = 25;float price = 19.9f;double salary = 5000.50;char initial = 'J';// 打印变量的值 (%d, %f, %lf, %c 是对应类型的"占位符")printf("年龄 (Age): %d\n", age);printf("价格 (Price): %.2f\n", price); // %.2f 表示保留2位小数printf("工资 (Salary): %lf\n", salary); // %lf 通常用于 doubleprintf("姓氏首字母 (Initial): %c\n", initial);printf("\n--- 看看它们占多大地方 (单位:字节) ---\n");// sizeof 返回的是 size_t 类型,用 %zd 来打印比较安全printf("int 占 %zd 字节\n", sizeof(int));printf("float 占 %zd 字节\n", sizeof(float));printf("double 占 %zd 字节\n", sizeof(double));printf("char 占 %zd 字节\n", sizeof(char));printf("变量 age 占 %zd 字节\n", sizeof(age)); // 也可以量变量本身return 0;
}

编译运行: gcc datatypes.c -o datatypes 然后 ./datatypes (或 datatypes.exe)

预期输出 (注意:具体大小可能因系统和编译器略有不同,尤其是 int):

年龄 (Age): 25
价格 (Price): 19.90
工资 (Salary): 5000.500000
姓氏首字母 (Initial): J--- 看看它们占多大地方 (单位:字节) ---
int 占 4 字节       // 常见大小,也可能是2或8
float 占 4 字节
double 占 8 字节
char 占 1 字节
变量 age 占 4 字节   // 和 int 类型大小一样

为什么要有不同大小的类型?

就像你寄快递,寄个小戒指用小盒子,寄台电视用大箱子。数据也一样,存个小整数用 short (短整型,比 int 可能更小),存很大的数可能要用 long long (长长整型)。合理选择类型,能更有效地利用内存空间。

流程图:变量声明、赋值、打印与测大小

开始
声明并初始化 int age
声明并初始化 float price
声明并初始化 double salary
声明并初始化 char initial
打印各变量的值
使用 sizeof 测量 int, float, double, char 的大小
打印这些类型的大小
结束

4. 关键字:C语言的"保留字"

C语言里有一些单词,被赋予了特殊的含义,它们是语言规则的一部分,我们不能把它们用作变量名或其他自定义的名字。这些就是 关键字 (Keywords) 或叫 保留字 (Reserved Words)

比如我们已经见过的 int, float, char, double, return 都是关键字。还有一些控制流程的,比如 if, else, for, while 等等。

C语言总共有几十个关键字,你不需要一下子全记住! 随着学习的深入,你会自然而然地认识它们。

常见的几个:

  • 数据类型相关: int, float, double, char, void, short, long, signed, unsigned, struct, union, enum, typedef, sizeof
  • 流程控制相关: if, else, switch, case, default, for, while, do, break, continue, goto, return
  • 存储相关: auto, static, register, extern, const, volatile

重点: 看到这些词,知道它们有特殊用途,别拿来当变量名就行!

5. 代码的"句子":语句

我们的C程序,就是由一条条 语句 (Statements) 组成的,就像文章由一个个句子构成一样。大部分语句都以分号 ; 结尾,表示一个指令的结束。

C语言里有几种不同类型的"句子":

  1. 空语句 (Empty Statement): 就一个孤零零的分号 ;。它啥也不干,但语法上是合法的,有时在特定结构中会用到(现在先不用管)。
; // 这就是一条空语句
  1. 表达式语句 (Expression Statement): 一个表达式后面跟个分号。最常见的就是赋值操作。
age = 18;          // 赋值表达式 + ; -> 表达式语句
price * 0.8;       // 这个计算本身是个表达式,加上分号也是语句,虽然结果没被使用
x++;               // x自增,也是表达式语句 (等价于 x = x + 1;)
  1. 函数调用语句 (Function Call Statement): 调用一个函数,后面跟个分号。我们用 printf 就是典型的例子。
printf("Hello!\n"); // 调用printf函数 + ; -> 函数调用语句
scanf("%d", &age); // 调用scanf函数读取输入 (后面会学)
  1. 复合语句 (Compound Statement) / 代码块 (Block): 用一对花括号 {} 括起来的一堆语句。它在语法上被视为一条单独的语句,常用于 if, while, for 和函数定义中。
{ // 这是一个复合语句的开始int temp = 10;printf("临时变量是: %d\n", temp);temp = temp + 5;
} // 复合语句结束

注意: 复合语句的末尾 不需要 再加分号。

  1. 控制语句 (Control Statement): 用来控制程序执行流程的,比如决定代码走哪条路(if-else, switch),或者让某段代码重复执行(for, while, do-while),还有跳转 (break, continue, goto, return)。这些是C语言的"导航系统",非常重要,我们后面会专门学。

简单理解: 代码就是一句一句(语句)往下执行的,分号是句号,花括号 {} 用来包一组句子形成一个段落(代码块)。

6. 让代码说话:注释

代码不仅是给电脑看的,更是给人(包括几个月后的你自己!)看的。为了让代码更容易理解,我们可以添加 注释 (Comments)

注释就像是代码旁边的"旁白"或"注解",编译器会完全忽略它们,它们只为阅读代码的人服务。

为啥要写注释?

  • 解释复杂逻辑:“这段代码是为了解决那个超难的bug…”
  • 说明变量用途:“这个 isValid 变量是用来标记用户输入是否合法的…”
  • 标记待办事项:“// TODO: 这里需要加个错误处理”
  • 暂时"屏蔽"代码:测试时,可以把某段代码注释掉,暂时不让它执行。

C语言注释的两种写法:

  1. 单行注释 //: 从 // 开始,一直到这行末尾,都是注释。适合简短的说明。
// 这是一整行注释
int count = 0; // 这是跟在代码后面的注释,解释 count 的初始值
  1. 多行注释 /* ... */: 从 /* 开始,到 */ 结束,中间的所有内容(可以跨越多行)都是注释。适合大段的解释或暂时屏蔽多行代码。
/*这里可以写好多好多行的注释,详细说明下面这个函数的功能、参数含义等等。
*/
int calculate_sum(int a, int b) {return a + b;
}/* 暂时把这段代码注释掉,以后可能还会用
if (error_occurred) {handle_error();
}
*/

测试案例 3:使用注释 (comments.c)

#include <stdio.h>/** 程序名称: 注释示例* 功能: 演示两种注释的使用方法* 作者: [你的名字]* 日期: 2024-07-29*/
int main() {// 定义一个整数变量age,并初始化为18int age = 18;// 使用printf函数打印年龄printf("我的年龄是: %d\n", age); // 在屏幕上显示年龄/*// 下面这行代码被注释掉了,所以不会执行printf("这行不会被打印出来。\n");*/// 程序正常结束return 0; // 返回0表示成功
}

编译运行: gcc comments.c -o comments 然后 ./comments (或 comments.exe)

预期输出:

我的年龄是: 18

(注意:被注释掉的那行 printf 没有输出)

写注释的好习惯:

  1. 写有意义的注释,解释"为什么"这么做,而不是简单重复代码"干了什么"。
  2. 保持注释和代码同步更新。
  3. 别写太多废话注释。

7. 接下来学什么 & 推荐资源

恭喜你!你已经迈出了C语言学习的第一步,掌握了:

  • C语言是啥
  • 写和运行第一个程序 (Hello, World)
  • 基本的数据类型和变量
  • 关键字的概念
  • 语句和注释

但这只是新手村!接下来,你可以继续探索:

  • 运算符: 加减乘除 (+ - * / %),比较大小 (> < == !=),逻辑判断 (&& || !) 等。
  • 输入 (scanf): 如何从键盘读取用户输入的数据。
  • 控制流: if-else (如果…就…否则…),switch (多选一),for / while (重复执行/循环)。这些是让程序"聪明"起来的关键!
  • 数组: 一次性存储多个同类型的数据(比如存一个班所有同学的成绩)。
  • 函数: 把代码打包成可重用的模块,让程序更整洁。
  • 指针: C语言的"核武器",直接操作内存地址,强大但也需要小心使用。

学习资源推荐

经典书籍 (适合静心啃):

  • 《C Primer Plus》 (第6版): 非常厚,但内容详尽,讲解细致,例子丰富,适合自学入门。★★★★★
  • 《C程序设计语言》 (The C Programming Language, K&R): C语言之父写的经典之作,非常精炼,但可能对纯新手有点难度,适合有一定基础后拔高

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

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

相关文章

请求参数、路径参数、查询参数、Spring MVC/FeignClient请求相关注解梳理

目录 1 请求分类1.1 URL参数--查询参数1.2 URL参数--路径参数 2 请求相关注解2.1 RequestParam--查询参数2.2 PathVariable--路径参数2.3 RequestBody2.4 Param & RequestLine2.5 SpringMVC请求参数注解用在FeignClient里 使用SpringMVC处理http请求或使用FeignClient进行请…

智能指针之设计模式3

这次我们看一下智能指针是如何使用策略模式来释放资源的&#xff0c;同时又是如何扩展功能&#xff0c;管理更多的资源对象类型的。 3、策略模式 策略模式作为一种软件设计模式&#xff0c;指对象有某个行为&#xff0c;但是在不同的应用场景中&#xff0c;该行为有不同的实现…

华为盘古OS深度评测:构建AI自进化系统的实践密码

华为盘古OS通过分布式AI内核与自适应学习框架的深度耦合&#xff0c;重新定义操作系统级智能能力。实测显示其AI任务调度效率较传统系统提升17倍&#xff0c;本文从智能体编排、持续学习机制、端云协同架构三个维度&#xff0c;解析如何基于DevKit 3.0打造具备认知进化能力的下…

精益数据分析(28/126):解读商业模式拼图与关键指标

精益数据分析&#xff08;28/126&#xff09;&#xff1a;解读商业模式拼图与关键指标 在创业和数据分析的探索旅程中&#xff0c;每一次深入研究都可能带来新的启发和突破。今天&#xff0c;我们依旧带着共同进步的初心&#xff0c;深入解读《精益数据分析》中关于商业模式的…

GitLab Runner配置并行执行多个任务

检查并修改方法&#xff1a; 打开 Runner 的配置文件&#xff08;通常位于 /etc/gitlab-runner/config.toml 或 ~/.gitlab-runner/config.toml&#xff09;。 确保 concurrent 值大于 1&#xff0c;例如&#xff1a; concurrent 4 # 允许最多 4 个任务同时运行重启 Runner…

开发首个Spring Boot应用

&#x1f4cb; 前置条件 &#x1f3af; 在开始之前&#xff0c;请打开终端并运行以下命令以确保已安装正确版本的 Java&#xff1a; $ java -version openjdk version "17.0.4.1" 2022-08-12 LTS OpenJDK Runtime Environment (build 17.0.4.11-LTS) OpenJDK 64-Bi…

【信息系统项目管理师】高分论文:论质量管理和进度管理(智慧旅游平台建设项目)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划质量管理2、质量保证3、质量控制论文 2019年3月,我作为项目经理,参加了某市智慧旅游平台建设项目,负责项目的全面管理, 该项目以打造一流的国内外生态旅游城市为目标,旨在大数据云平台建设的基…

DAM-3B,英伟达推出的多模态大语言模型

DAM-3B是什么 DAM-3B&#xff08;Describe Anything 3B&#xff09;是英伟达推出的一款多模态大语言模型&#xff0c;专门用于为图像和视频中的特定区域生成详细描述。用户可以通过点、边界框、涂鸦或掩码等方式来标识目标区域&#xff0c;从而得到精准且符合上下文的文本描述…

如何判断你的PyTorch是GPU版还是CPU版?

如何判断你的PyTorch是GPU版还是CPU版&#xff1f; PyTorch作为当前最流行的深度学习框架之一&#xff0c;支持在CPU和GPU(NVIDIA CUDA)上运行。对于深度学习开发者来说&#xff0c;正确识别PyTorch版本至关重要&#xff0c;因为GPU版本可以带来10-100倍的性能提升。本文将全面…

Gin框架

Gin 快速入门 go get -u github.com/gin-gonic/gin package main import gin "github.com/gin-gonic/gin"func main() {engine : gin.Default()engine.GET("/", func(c *gin.Context) {c.String(200, "Hello Gin")})engine.Run(":8888&q…

【Project】基于spark-App端口懂车帝数据采集与可视化

文章目录 hadoop完全分布式部署hdfs-site.xmlcore-site.xmlmarpred-site.xmlyarn-site.xml spark集群部署spark-env.sh mongodb分片模式部署config 服务器初始化config 副本集 shard 服务器初始化shard 副本集 mongos服务器添加shard设置chunk大小 启动分片为集合 user 创建索引…

brew 安装openjdk查看其版本

使用brew&#xff08;如果你使用Homebrew安装&#xff09; 如果你通过Homebrew安装了OpenJDK&#xff0c;可以使用以下命令来查看安装的版本,&#xff1a; brew list --versions openjdk8 这将会列出所有通过Homebrew安装的OpenJDK版本及其版本号。 3. 查看/usr/libexec/ja…

【Linux网络】构建与优化HTTP请求处理 - HttpRequest从理解到实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

Day12(回溯法)——LeetCode51.N皇后39.组合总和

1 前言 今天刷了三道回溯法和一道每日推荐&#xff0c;三道回溯法也迷迷糊糊的&#xff0c;每日推荐把自己绕进去了&#xff0c;虽然是一道之前做过的题的变种。刷的脑子疼。。。今天挑两道回溯题写一下吧&#xff0c;其中有一道是之前做过的N皇后&#xff0c;今天在详细写一写…

初阶数据结构:二叉搜索树

目录 概念 性能 效率分析 二分缺陷 功能 插入 查找 删除 实现 应用 概念 二叉搜索树&#xff08;又称&#xff1a;二叉排序树&#xff09;&#xff0c;是由一些具有特别性质的二叉树衍变而来。 只要一棵二叉树具备以下性质&#xff0c;即可称作二叉搜索树。 【1】若…

详解springcloud gateway工作原理、断言、filter、uri、id、全局跨域、globalfilter等以及关键源码实现

1.gateway概念 网关就是当前微服务项目的"统一入口"程序中的网关就是当前微服务项目对外界开放的统一入口所有外界的请求都需要先经过网关才能访问到我们的程序提供了统一入口之后,方便对所有请求进行统一的检查和管理 2. 网关的主要功能 将所有请求统一经过网关网…

C#中的弱引用使用

弱引用&#xff08;Weak Reference&#xff09;是一种特殊的引用类型&#xff0c;它允许你引用一个对象&#xff0c;但不会阻止该对象被垃圾回收器&#xff08;GC&#xff09;回收。弱引用通常用于需要缓存或跟踪对象&#xff0c;但又不希望因保留引用而导致内存泄漏的场景。弱…

spring响应式编程系列:异步生产数据

目录 示例 大致流程 create new MonoCreate subscribe new LambdaMonoSubscriber monoCreate.subscribe accept success onNext 时序图 类图 数据发布者 MonoCreate 数据订阅者 LambdaMonoSubscriber 订阅的消息体 DefaultMonoSink 本篇文章我们来研究如何将…

MCP Python SDK构建的**SQLite浏览器**的完整操作指南

以下是使用MCP Python SDK构建的SQLite浏览器的完整操作指南&#xff1a; 一、环境准备 安装依赖 # 安装MCP SDK及SQLite支持 pip install mcp sqlite3创建测试数据库 sqlite3 test.db <<EOF CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT); IN…

【Python爬虫基础篇】--3.cookie和session

目录 1.cookie 1.1.定义 1.2.参数 1.3.分类 2.session 3.使用cookie登录微博 4.使用session登录 1.cookie 由于http是一个无状态的协议&#xff0c;请求与请求之间无法相互传递或者记录一些信息&#xff0c;cookie和session正是为了解决这个问题而产生。 例子&#xff1…