欢迎光临
我们一直在努力

C语言零基础核心语法精讲(变量+流程控制+数组+函数+指针 全程代码实战)

前言

C语言最核心、最必备的五大基础模块:变量与数据类型、流程控制、数组、函数、指针。

包含:概念讲解 + 语法规则 + 完整可运行代码 + 实战案例 + 易错点总结,完全适配入门学习、笔记复盘、吃透本文即可夯实C语言所有底层基础。

适合人群:C语言零基础、初学入门、基础薄弱需要系统复盘的开发者。


一、C语言基础核心:变量与数据类型

1.1 什么是变量?

变量是计算机内存中临时存储数据的容器,程序运行过程中,变量的值可以随时修改。

简单理解:内存就是仓库,变量就是仓库里的箱子,箱子可以存放不同的数据,也可以更换数据。

1.2 变量三要素

  • 数据类型:规定变量存储的数据种类(整数、小数、字符)

  • 变量名:变量的唯一标识,用于操作变量

  • 变量值:变量内存中存储的真实数据

1.3 常用基础数据类型

数据类型

占用空间

存储内容

取值范围

char

1字节

单个字符/字母/符号

-128 ~ 127

short

2字节

短整数

-32768 ~ 32767

int

4字节

普通整数(最常用)

-2147483648 ~ 2147483647

long

4/8字节

长整数

大于int范围

float

4字节

单精度小数

6~7位有效数字

double

8字节

双精度小数(常用)

15~16位有效数字

1.4 变量定义与初始化语法

// 先定义,后赋值

数据类型 变量名;

变量名 = 值;

// 定义并直接初始化(推荐写法)

数据类型 变量名 = 值;

1.5 完整实战代码

#include <stdio.h>

int main()
{ // 定义并初始化不同类型变量
char ch = 'A';
int num = 100;
float score = 95.5f;
double price = 19.99;

// 打印变量值
printf("字符变量:%c\\n", ch);
printf("整型变量:%d\\n", num);
printf("单精度小数:%f\\n", score);
printf("双精度小数:%lf\\n", price);

// 修改变量值
num = 200;
printf("修改后的整型变量:%d\\n", num);
return 0;
}

1.6 变量命名规则(必记)

  • 只能由字母、数字、下划线组成

  • 不能以数字开头

  • 不能使用C语言关键字(int、char、if、for等)

  • 区分大小写(num 和 Num 是两个不同变量)

  • 命名尽量见名知意,提高代码可读性

  • 1.7 常量介绍

    常量是值不可修改的量,分为字面常量和宏常量:

    #include <stdio.h>

    #define PI 3.14159 // 宏常量,全局有效

    int main()
    {
    const int YEAR = 2026;

    // 只读常量
    printf("圆周率:%f\\n", PI);
    printf("年份:%d\\n", YEAR);

    return 0;
    }


    二、流程控制(if/else、switch、for、while、do-while)

    流程控制是程序的逻辑骨架,C语言程序默认从上到下顺序执行,通过流程控制可以实现:条件判断、循环执行、逻辑跳转。

    2.1 分支结构(条件判断)

    2.1.1 if-else 条件语句

    适用场景:区间判断、多条件判断、复杂逻辑判断

    语法:

    // 单分支
    if(条件表达式)
    {
    满足条件执行的代码;
    }

    // 双分支
    if(条件表达式)
    {

    条件成立执行;

    }else{
    条件不成立执行;
    }

    // 多分支
    if(条件1)
    {
    条件1成立执行;
    }else if(条件2){
    条件2成立执行;
    }else{
    所有条件不成立执行;
    }

    实战案例:成绩等级判断

    #include <stdio.h>

    int main()
    {
    int score;
    printf("请输入考试成绩:");
    scanf("%d", &score);
    if(score >= 90)
    {
    printf("优秀\\n");
    }else if(score >= 80){
    printf("良好\\n");
    }else if(score >= 60){
    printf("及格\\n");
    }else{
    printf("不及格\\n");
    }
    return 0;
    }

    2.1.2 switch 分支语句

    适用场景:固定值匹配(不适合区间判断)

    语法规则:

    • 表达式结果必须是整型/字符型

    • case 后为固定常量值

    • 必须加break,否则会穿透执行

    • default 为可选,匹配所有不满足的情况

    实战案例:星期判断

    #include <stdio.h>
    int main()
    {
    int day;
    printf("请输入星期数字(1-7):");
    scanf("%d", &day);
    switch(day)
    {
    case 1:
    rintf("星期一\\n");
    break;
    case 2:
    printf("星期二\\n");
    break;
    case 3:
    printf("星期三\\n");
    break;
    case 4:
    printf("星期四\\n");
    break;
    case 5:
    printf("星期五\\n");
    break;
    case 6:
    printf("星期六\\n");
    break;
    case 7:
    printf("星期日\\n");
    break;
    default:
    printf("输入数字无效\\n");
    }
    return 0;
    }

    2.2 循环结构(重复执行代码)

    2.2.1 for 循环(最常用,已知循环次数)

    语法:

    for(初始化表达式; 条件判断; 更新表达式)
    {
    循环体代码;
    }

    执行顺序:初始化 → 条件判断 → 循环体 → 更新 → 再次判断

    打印1-100数字
    #include <stdio.h>
    int main()
    {
    int i;
    for(i = 1; i <= 100; i++)
    {
    printf("%d ", i);
    }
    return 0;
    }

    2.2.2 while 循环(未知循环次数)

    先判断,后执行,条件成立才循环

    while(条件表达式)
    {
    循环体;
    变量更新;
    }

    实战案例:1~10累加和

    #include <stdio.h>
    int main()
    {
    int i = 1;
    int sum = 0;
    while(i <= 10)
    {
    sum += i;
    i++;
    }
    printf("1~10累加和:%d\\n", sum);
    return 0;
    }

    2.2.3 do-while 循环

    先执行一次循环体,再判断条件,至少执行一次

    #include <stdio.h>
    int main()
    {
    int i = 1;
    do{
    printf("执行循环\\n");
    i++;
    }while(i <= 3);
    return 0;
    }

    2.3 循环跳转语句

    • break:跳出当前循环/switch,终止循环

    • continue:跳过本次循环,直接进入下一次循环

    实战案例:跳过偶数,只打印奇数

    #include <stdio.h>
    int main()
    {
    int i;
    for(i = 1; i <= 10; i++)
    {
    if(i % 2 == 0)
    {
    continue;
    // 遇到偶数跳过
    }
    printf("%d ", i);
    }
    return 0;
    }


    三、数组(批量存储同类型数据)

    3.1 数组概念

    数组是相同数据类型的有序集合,连续开辟内存空间,专门用来批量存储一组相同类型的数据,避免定义大量重复变量。

    3.2 一维数组

    3.2.1 定义语法

    // 完整定义 数据类型 数组名[数组长度];
    // 初始化 数据类型 数组名[长度] = {值1,值2,值3…};

    3.2.2 核心特点

  • 数组下标从0开始(重点!)

  • 内存空间连续

  • 数组长度一旦定义,不可修改

  • 未初始化的元素默认值为0

  • 3.2.3 实战代码:数组遍历+最值查找

    #include <stdio.h>
    int main()
    {
    // 定义并初始化数组
    int arr[5] = {12, 45, 8, 96, 23};
    int max = arr[0]; int i;

    // 遍历数组
    printf("数组所有元素:");
    for(i = 0; i < 5; i++)
    {
    printf("%d ", arr[i]);
    // 找最大值
    if(arr[i] > max)
    {
    max = arr[i];
    }
    }
    printf("\\n数组最大值:%d\\n", max);
    return 0;
    }

    3.3 二维数组

    二维数组可以理解为多行多列的表格,适合存储矩阵、表格数据

    3.3.1 定义与初始化

    int arr[2][3] = {{1,2,3},{4,5,6}};

    3.3.2 实战遍历代码

    #include <stdio.h>

    int main()
    {
    int arr[2][3] = {{1,2,3},{4,5,6}};

    // 双层循环遍历二维数组
    for(int i = 0; i < 2; i++)
    {
    for(int j = 0; j < 3; j++)
    {
    printf("%d ", arr[i][j]);
    }
    printf("\\n");
    }
    return 0;
    }

    3.4 字符数组与字符串

    C语言无专门字符串类型,通过字符数组存储字符串,字符串默认以 \\0 作为结束标志。

    #include <stdio.h>
    int main()
    {
    // 字符串初始化
    char str1[] = "hello c";
    char str2[10] = {'a','b','c','\\0'};
    printf("字符串1:%s\\n", str1);
    printf("字符串2:%s\\n", str2);
    return 0;
    }


    四、函数(代码模块化、复用核心)

    4.1 函数概念

    函数是完成特定功能的代码块,核心作用:代码复用、简化结构、分层开发、便于维护。

    C语言程序入口:main函数,一个程序有且仅有一个main函数。

    4.2 函数三要素

    • 返回值类型:函数执行完毕返回的数据类型

    • 函数名:函数唯一标识

    • 参数列表:函数需要接收的外部数据

    4.3 函数语法结构

    返回值类型 函数名(参数列表)
    {
    函数体代码;
    return 返回值;
    }

    4.4 函数分类实战

    4.4.1 无参无返回值函数

    #include <stdio.h>

    // 自定义函数
    void printHello()
    {
    printf("Hello C语言函数!\\n");
    }
    int main()
    {
    printHello();
    // 函数调用
    return 0;
    }

    4.4.2 有参有返回值函数(最常用)

    实战案例:实现两数求和

    #include <stdio.h>

    // 求和函数
    int add(int a, int b)
    {
    int sum = a + b;
    return sum; // 返回结果
    }

    int main()
    {
    int res = add(10, 20);
    // 调用函数,接收返回值
    printf("两数之和:%d\\n", res);
    return 0;
    }

    4.5 函数声明与调用规则

    如果自定义函数写在main函数下方,需要在main上方提前声明,否则编译器报错。

    #include <stdio.h>
    // 函数声明
    int maxNum(int a, int b);
    int main()
    {
    printf("最大值:%d\\n", maxNum(50, 90));
    return 0;
    }
    // 函数定义
    int maxNum(int a, int b)
    {
    return a > b ? a : b;
    }

    4.6 局部变量与全局变量

    • 局部变量:定义在函数内部,仅当前函数有效,函数结束销毁

    • 全局变量:定义在所有函数外部,整个程序所有函数均可使用,程序结束销毁


    五、指针(C语言灵魂、核心难点精讲)

    5.1 指针核心概念

    指针就是地址,指针变量就是存储地址的变量。

    计算机中每个变量、数组、函数都有独立的内存地址,指针专门用来操作内存地址。

    5.2 两个核心符号

    • & 取地址符:获取变量的内存地址

    • * 解引用符:通过地址找到对应内存的值

    5.3 指针变量定义与基础使用

    语法:数据类型 *指针变量名;

    #include <stdio.h>
    int main()
    {
    int num = 100;
    int *p = &num;

    // p存储num的地址
    printf("num的值:%d\\n", num);
    printf("num的地址:%p\\n", &num);
    printf("指针p存储的地址:%p\\n", p);
    printf("通过指针取值:%d\\n", *p);

    // 通过指针修改原变量值
    *p = 200;
    printf("修改后num的值:%d\\n", num);
    return 0;
    }

    5.4 指针的核心作用

  • 间接修改变量的值

  • 减少数据拷贝,提升程序效率

  • 操作数组、字符串

  • 实现函数间数据双向传递

  • 5.5 指针实现函数交换两个数(经典案例)

    普通传参无法修改实参,指针传参可以修改外部变量

    #include <stdio.h>
    // 指针传参交换两个数
    void swap(int *a, int *b)
    {
    int temp = *a; *a = *b; *b = temp;
    }
    int main()
    {
    int x = 10, y = 20;
    printf("交换前:x=%d, y=%d\\n", x, y);
    swap(&x, &y);
    printf("交换后:x=%d, y=%d\\n", x, y);
    return 0;
    }

    5.6 指针与数组

    数组名本质是数组首元素的地址,可以通过指针遍历数组

    #include <stdio.h>
    int main()
    {
    int arr[3] = {11,22,33};
    int *p = arr; // 数组名直接代表首地址
    // 指针遍历数组
    for(int i = 0; i < 3; i++)
    {
    printf("%d ", *(p + i));
    }
    return 0;
    }

    5.7 新手指针易错点

    • 指针变量必须初始化,不能使用野指针(未赋值的指针)

    • 指针类型必须和指向的变量类型匹配

    • * 和 & 互为逆运算,不要混淆使用场景


    六、阶段总结

    本文完整覆盖C语言入门五大核心模块:

  • 变量:数据存储基础,掌握类型、定义、作用域

  • 流程控制:程序逻辑核心,分支+循环实现所有业务逻辑

  • 数组:批量数据存储,一维、二维、字符数组全覆盖

  • 函数:代码模块化,实现复用与分层思维

  • 指针:C语言灵魂,地址操作、数据交互、数组底层原理

  • 赞(0)
    未经允许不得转载:171主机测评 » C语言零基础核心语法精讲(变量+流程控制+数组+函数+指针 全程代码实战)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址