暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库内核开发新手入门系列(三)初识C语言的程序结构

原创 Salvatore-zz 2025-02-26
144

前言:

        上一篇,我们已经了解了C语言中的基础数据类型,这是C语言学习的技术,本篇我们继续介绍C语言的程序逻辑结构,让大家进一步熟悉和了解C语言。

一、C语言的程序结构示例:

先来看一个简单的示例,本篇的内容也都会以这个案例展开:

# include <stdio.h>
int main()
{
    int x,y,z;
    printf("Welcome to HaloDB!\n");
    return 0;
}

    在上面的这个示例中,我们来简单的看下这段c程序都有哪些部分组成,首先是main 函数,每个C语言程序都会包含一个main主体函数,作为程序运行得入口程序。就好比我们进入到每个城市当中,城市都会有一个城市的入口。

    函数名后的一对圆括号,以及在圆括号后面的一对大括号,和包含在大括号内的一组程序代码构成。这个圆括号中可以放置需要在程序启动时传入 main 函数的参数。可以是一个,或者多个参数。而在这之后的大括号中的部分,就是这个程序的主体部分。里面是可以执行的程序语句或者注释等相关内容。

注意:

        按照 C 语言的国际标准,函数需要有返回值,并且通常情况下只能是int类型(数据类请参考上一章),当然也有一些人还在用void的写法,但是这并不是c语言的标准语法,不建议使用。

二、C语言中的include指令:

    在C语言中,# include是一个预处理指令,用于在编译前将指定文件的内容插入到当前文件中。它通常用于包含头文件(.h 文件),以便在当前源文件中使用这些头文件中定义的函数、宏、类型和变量。# include <stdio.h> ,这个语句代表了我们要在程序中使用 STDIO 库中提供的函数,我们也会把 stdio.h 这样的文件称之为头文件。通常情况下都是包含函数的声明,方便自己以及他人重复使用已经实现的程序,通过这个预处理指令来指引编译器找到我们所需的引用内容。

两种形式

1、include 后面跟尖括号

#include <stdio.h>
  • 用于包含标准库头文件。

  • 编译器会在系统预定义的标准库路径中查找该文件。

2、include 后面跟双引号

#include "myhalo.h"
  • 用于包含用户自定义的头文件。

  • 编译器首先在当前文件所在目录中查找该文件,如果未找到,再到标准库路径中查找。

三、C语言中声明变量与定义:

    在C语言中,变量声明变量定义是两个相关但不同的概念。理解它们的区别和用法是编写正确、高效C程序的基础。

1. 变量声明(Declaration)

变量声明告诉编译器变量的类型和名称,但不会分配内存空间。它的作用是让编译器知道变量的存在,以便在后续代码中使用。

语法:

int a;       // 声明一个整型变量a
float b;     // 声明一个浮点型变量b
char c;      // 声明一个字符型变量c
  • 声明的特点

    • 声明不会分配内存。

    • 可以在多个地方声明同一个变量(使用 extern 关键字)。

    • 通常用于头文件中,以便多个源文件共享变量。

示例:

extern int x;  // 声明一个外部变量x,告诉编译器x在其他地方定义

2. 变量定义(Definition)

    在C语言中,变量定义不但声明了变量的类型和名称,而且在这个过程中会为变量分配内存空间。定义也是可以理解为变量真实创建的位置。

int a = 10;       // 定义并初始化一个整型变量a
float b = 3.14;   // 定义并初始化一个浮点型变量b
char c = 'A';     // 定义并初始化一个字符型变量c
  • 变量的特点

    • 定义会分配内存。

    • 每个变量只能定义一次。

    • 定义时可以初始化变量。

但是变量与声明并不是同一个概念,很多新手会弄混这两个概念,这里我做了一个表格用来说明变量与定义的关系与区别。

3、printf 函数

        printf 是 C 语言中用于格式化输出的标准库函数,定义在 <stdio.h> 头文件中。它可以将数据按指定格式输出。return 函数是在程序执行到此结束程序并返回其所携带的参数数值。 语句一般是功能函数与分支结构的组合。程序会根据条件的变化来执行相应的操作,最终计算出我们需要的结果。

函数原型:

int printf(const char *format, ...);

格式说明符:

格式说明符以 % 开头,后跟一个字符,指定数据的输出格式。常见说明符包括:

  • %d 或 %i: 输出有符号十进制整数。

  • %u: 输出无符号十进制整数。

  • %f: 输出浮点数。

  • %c: 输出单个字符。

  • %s: 输出字符串。

  • %x 或 %X: 输出十六进制整数(小写或大写)。

  • %o: 输出八进制整数。

  • %p: 输出指针地址。

  • %%: 输出百分号 %

#include <stdio.h>

int main() {
    int a = 10;
    float b = 3.14;
    char c = 'A';
    char str[] = "HaloDB,NB !";

    printf("Integer: %d\n", a);
    printf("Float: %f\n", b);
    printf("Character: %c\n", c);
    printf("String: %s\n", str);
    printf("Hexadecimal: %x\n", a);
    printf("Octal: %o\n", a);
    printf("Pointer: %p\n", &a);

    return 0;
}

输出结果:

Integer: 10
Float: 3.140000
Character: A
String: HaloDB,NB !
Hexadecimal: a
Octal: 12
Pointer: 0x7ffee4b5c9d4

函数注意事项:

  1. 格式匹配: 格式说明符必须与参数类型匹配,否则可能导致未定义行为。

  2. 返回值printf 返回成功输出的字符数,出错时返回负值。

  3. 缓冲区: 输出通常先写入缓冲区,缓冲区满或遇到换行符 \n 时才会刷新到屏幕。

4、return函数

    在 C 语言中,return 是一个关键字,用于从函数中返回值并结束函数的执行。它不仅可以返回值给调用者,还可以控制程序的流程。

return函数的作用:

  1. 返回值:将函数的结果返回给调用者。

  2. 结束函数:执行 return 后,函数会立即终止,后续代码不会执行。

语法:

return [expression];
  • expression:要返回的值(可选)。如果函数返回类型为 void,则不需要表达式。

  • 如果函数有返回值类型(如 intfloat 等),expression 的类型必须与函数声明的返回类型一致。

一般情况下,return的使用场景包括,返回值,提前结束函数,返回空这几种。

返回值

int add(int a, int b) {
    return a + b; // 返回 a + b 的结果
}

提前终止:

void checkNumber(int num) {
    if (num < 0) {
        printf("HaloDB NB.\n");
        return; // 提前结束函数
    }
    printf("HaloDB  NB.\n");
}

返回空:

void printHello() {
    printf("Hello, World!\n");
    return; // 可省略,函数会自动返回
}

注意:

  • 如果函数声明了返回类型(如 intfloat 等),return 必须返回相应类型的值。

  • 如果函数返回类型为 voidreturn 后不能跟任何值。

  • C 语言中,函数只能返回一个值。如果需要返回多个值,可以使用指针或结构体。

最后:

    虽然是慢工,但是不是什么细活,下期见。






最后修改时间:2025-02-26 10:47:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论