C 入门第一课:Hello World、变量与基本数据类型

C 语言诞生于 1972 年,到现在依然是操作系统、嵌入式开发的主力语言。很多高校的编程第一课就用它,因为它足够贴近底层,能让你真正看懂程序是怎么跑起来的。这篇就带你写出第一个 C 程序,认识变量和基本数据类型。

第一个程序:Hello World

学任何语言的第一步都是跟世界打招呼。新建一个 hello.c 文件,输入下面的代码:

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}

编译并运行(以 gcc 为例):

gcc hello.c -o hello
./hello

输出:

Hello, World!

简单解释一下:#include <stdio.h> 引入标准输入输出库,printf 就住在里面;main 函数是程序的入口,C 程序总是从这里开始执行;\n 是换行符;return 0 表示程序正常结束。

变量:给数据找个盒子

变量就像贴了名字的盒子,用来存放数据。C 是静态类型语言,变量用之前必须先声明类型:

#include <stdio.h>

int main(void) {
    int age = 20;          // 整数
    double price = 9.9;    // 双精度浮点数
    char grade = 'A';      // 单个字符,用单引号

    printf("age = %d\n", age);        // 输出:age = 20
    printf("price = %.1f\n", price);  // 输出:price = 9.9
    printf("grade = %c\n", grade);    // 输出:grade = A
    return 0;
}

注意格式说明符要和变量类型一一对应:%d 对应 int,%f 对应 double(%.1f 表示保留 1 位小数),%c 对应 char。类型对不上,输出就会乱码。

常用的基本数据类型

C 的基本数据类型主要有这几类:

类型 用途 典型大小
int 整数 4 字节
float 单精度浮点数 4 字节
double 双精度浮点数 8 字节
char 字符 1 字节

类型占几个字节,不同平台可能有差异,想知道确切答案,用 sizeof 一测便知:

#include <stdio.h>

int main(void) {
    printf("int 占 %zu 字节\n", sizeof(int));       // 输出:int 占 4 字节
    printf("double 占 %zu 字节\n", sizeof(double)); // 输出:double 占 8 字节
    printf("char 占 %zu 字节\n", sizeof(char));     // 输出:char 占 1 字节
    return 0;
}

读入用户的输入

程序要能交互,就得会读输入,scanf 是最常用的输入函数:

#include <stdio.h>

int main(void) {
    int a, b;
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    printf("%d + %d = %d\n", a, b, a + b); // 输入 3 和 5 时输出:3 + 5 = 8
    return 0;
}

&a 里的 & 是取地址符,scanf 需要知道变量放在内存的哪个位置,才能把读到的值写进去——这正是指针登场的地方,后面会细讲。

简单算术运算

变量声明好了,就能做运算:

#include <stdio.h>

int main(void) {
    int a = 7, b = 2;
    printf("%d\n", a + b);     // 输出:9
    printf("%d\n", a / b);     // 输出:3(整数除法会丢掉小数部分)
    printf("%d\n", a % b);     // 输出:1(取余数)
    printf("%.2f\n", 7.0 / 2); // 输出:3.50(至少一边是小数才是小数除法)
    return 0;
}

a / b 得到 3 而不是 3.5,是新手最容易踩的坑:两个整数相除,结果还是整数,小数部分直接被扔掉。

小结

这篇我们完成了三件事:写出并运行第一个 C 程序;学会声明变量并用 printf 输出;认识了 int、double、char 等基本类型,还会用 scanf 读输入。C 的关键词不多,但每一步都离内存更近一点,下一篇我们聊聊函数与头文件。