目录
[3.hello world](#3.hello world)
[3.变量初始化:定义时赋值 vs 先定义后赋值](#3.变量初始化:定义时赋值 vs 先定义后赋值)
[4.作用域:局部变量 vs 全局变量](#4.作用域:局部变量 vs 全局变量)
前言
C语言是编程世界的基石,诞生半世纪仍长盛不衰,是理解计算机底层逻辑的核心钥匙。
本文从0起步,带你拆解C语言核心知识,开启你的编程入门与进阶之路。
一.入门基础
1.什么是C语言
C语言是一种结构化、高效、可移植的编程语言,诞生于1972年。它既具备高级语言的抽象能力,又能进行底层内存操作,因此被称为"中级语言"。它深刻影响了C++、Java、Python等众多语言,常用于操作系统、嵌入式系统、编译器、数据库等高性能或底层开发。
编写C程序通常需要编辑器和编译器,基本流程是:编写源码 → 编译为可执行文件 → 运行。
2.如何选择编译器?
- 初学者最简方案:Dev-C++:Windows平台,安装即用,无需配置。但软件较老,界面陈旧,代码提示较弱。
- 专业/跨平台方案:VS Code + GCC:通过安装插件可打造现代化IDE。需自行安装编译器(Windows可用MinGW-w64,Linux/macOS自带或安装),并配置tasks.json等文件,稍复杂。
- 工业级IDE:CLion (JetBrains):智能提示和调试体验极佳。但需付费或申请学生免费,对电脑配置要求较高。
- Windows专业方案:Visual Studio:功能强大的巨无霸,安装时选择"使用C++的桌面开发"即可,编译Windows程序首选。
- macOS原生方案:Xcode:苹果官方工具,完整安装包较大。
3.hello world
1.使用Dev-C++打出我们第一个代码吧!
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
以下就是我们的运行结果啦,现在你已经踏出了第一步,好好加油吧!!!

4.程序的基本结构
|-----|----------------------|
| 头文件 | #include <stdio.h> |
| 主函数 | main |
| 注释 | // /* */ |
需要注意代码的执行顺序是从上到下,从左到右。
二.核心基础语法
1.数据类型与变量
整数的类型以及演示
#include <stdio.h>
int main()
{
// 1. int 整数类型
int age = 20; // 定义并初始化int变量
int score = 95;
printf("=== int 整数类型 ===\n");
printf("年龄:%d,分数:%d\n", age, score);
return 0;
}
//结果
//=== int 整数类型 ===
//年龄:20 分数:95
浮点型演示并输出结果
#include <stdio.h>
#include <string.h>
// 1. 全局变量:作用域是整个程序,生命周期贯穿程序运行
int global_num = 100;
// 2. #define 宏常量:预处理阶段直接替换,本质不是变量
#define PI 3.1415926
#define MAX_AGE 120
int main()
{
// 2. float / double 浮点类型(小数)
float height = 1.80f; // float 后缀加f,单精度,占4字节
double weight = 75.5; // double 双精度,占8字节,精度更高
printf("\n=== float/double 浮点类型 ===\n");
printf("身高:%.2f米,体重:%.1f公斤\n", height, weight);
printf("PI(宏常量):%.7f\n", PI); // 宏常量直接使用
}
//结果
//=== float/double 浮点类型 ===
//身高:1.80米,体重:75.5公斤
//PI(宏常量):3.1415926
char 字符类型演示
#include <stdio.h>
int main()
{
char ch = 'A'; // 字符用单引号包裹,只能存1个字符
char str[] = "Hello"; // 字符串本质是char数组,用双引号
printf("\n=== char 字符类型 ===\n");
printf("单个字符:%c,ASCII码值:%d\n", ch, ch);
printf("字符串:%s\n", str);
}
//=== char 字符类型 ===
//单个字符:A,ASCII码值:65
//字符串:Hello
2.变量的定义,初始化,命名规则
// 正确的命名规则:字母/下划线/数字开头,不能是关键字,区分大小写
int _num = 10;
int user_age = 25;
int UserAge = 30; // 和user_age是两个不同变量
// 错误示范(编译器会报错,仅作说明):
// int 123num = 5; // 不能以数字开头
// int int = 10; // 不能用关键字命名
printf("_num:%d,user_age:%d,UserAge:%d\n", _num, user_age, UserAge);

3.变量初始化:定义时赋值 vs 先定义后赋值
int a; // 只定义,不初始化(局部变量值是随机垃圾值)
int b = 0; // 定义时初始化,推荐写法
a = 10; // 后赋值
printf("a:%d,b:%d\n", a, b);
结果为:a=10 b=0
4.作用域:局部变量 vs 全局变量
#include <stdio.h>
#include <string.h>
// 1. 全局变量:作用域是整个程序,生命周期贯穿程序运行
int global_num = 100;
// 2. #define 宏常量:预处理阶段直接替换,本质不是变量
#define PI 3.1415926
#define MAX_AGE 120
int main()
{
// ====================== 三、作用域:局部变量 vs 全局变量 ======================
printf("\n=== 作用域演示 ===\n");
// 局部变量:定义在main函数内,作用域仅在main中,生命周期随函数结束销毁
int local_num = 200;
printf("main函数内:全局变量global_num = %d,局部变量local_num = %d\n", global_num, local_num);
{
// 代码块内的局部变量,作用域仅在这个大括号内
int block_num = 300;
printf("代码块内:block_num = %d\n", block_num);
}
// printf("block_num = %d\n", block_num); // 报错:block_num超出作用域,无法访问
return 0;
}

5.常量,宏常量
#include <stdio.h>
#include <string.h>
//#define 宏常量:预处理阶段直接替换,本质不是变量
#define MAX_AGE 120
#define PI 3.1415926
int main()
{
// ====================== 四、常量演示 ======================
printf("\n=== 常量类型演示 ===\n");
// 1. 字面常量:直接写在代码里的固定值
100; // 整型字面常量
3.14; // 浮点字面常量
'a'; // 字符字面常量
"abc"; // 字符串字面常量
// 2. #define 宏常量:上面已经定义了PI和MAX_AGE,这里直接使用
printf("宏常量PI = %.7f,MAX_AGE = %d\n", PI, MAX_AGE);
// PI = 3.14; // 报错:宏常量不可修改
// 3. const 修饰的常变量:本质是变量,只是被const限制不可修改
const int const_num = 10;
printf("const常变量const_num = %d\n", const_num);
// const_num = 20; // 报错:const修饰的变量不可修改
return 0;
}

三.输入输出
C语言的输入输出核心是 stdio.h 头文件 里的两个函数: printf() (输出)和 scanf() (输入),是所有程序的基础交互工具。
1.基本语法
printf("格式控制字符串", 变量1, 变量2, ...);
2.常用占位符
|-----|--------------|------------|
| 占位符 | 对应数据类型 | 说明 |
| %d | int | 十进制整数 |
| %f | float/double | 浮点数(双、单精度) |
| %c | char | 单个字符 |
| %s | 字符串char[] | 字符串 |
| %if | double | 双精度浮点数 |
| %p | 指针 | 输出内存地址 |
3.格式控制
|-------|--------------------------------------|
| 保留小数 | %.2f 保留2位小数 |
| 左/右对齐 | %10d 占10位宽度,右对齐; %-10d 左对齐 |
| 转义字符 | \n 换行、 \t 制表符、 \\ 输出 \ 、 \" 输出 |
4.常见避坑指南
- & 漏写: scanf("%d", age); 直接报错,必须写 &age
- 格式串不匹配: scanf("%d,%f", &a, &b); 输入时必须用逗号分隔( 10,3.14 ),否则读取失败
- 缓冲区残留: scanf 会留下换行符 \n ,导致后续 getchar() 读取到空值,可用 getchar() 手动清空
- 字符串输入: %s 遇到空格/回车就停止,要读带空格的字符串用 gets() (不推荐,不安全)或 fgets()
5.字符专用输入输出
-
putchar() :输出单个字符
char ch = 'A';
putchar(ch); // 等价于 printf("%c", ch); -
getchar() :读取单个字符
char ch = getchar(); // 从键盘读一个字符,回车也算
四.顺序结构程序设计
- 顺序结构的本质:按代码顺序依次执行
- 简单顺序程序实战:计算、数据转换、输入输出综合练习
- 代码调试基础(排查顺序执行的错误。
五.总结
从0到选择结构,核心就是:会写基础程序 → 懂变量和数据 → 会用运算符做判断 → 能输入输出 → 理解顺序执行,这些全部掌握后,再学 if / switch 就完全顺理成章了。