1.26 C语言基础的学习

image0

1. 安装编译器

C 语言编译器用于把源代码编译成最终的可执行程序。这里假设您已经对编程语言编译器有基本的了解了。

最常用的免费可用的编译器是 GNU 的 C/C++ 编译器。

1.1 windows

MinGw 是 Minimal GNU on Windows 的缩写,允许在 GNU/Linux 和 Windows 平台生成本地的 Windows 程序而不需要第三方运行时库。本文主要介绍 MinGw 的安装和使用。

安装

1.下载 min-gw 安装程序,下载 mingw-get-setup.exe (86.5 kB)

2.运行 mingw-get-setup.exe (86.5 kB) ,点击“运行”,continue等,注意记住安装的目录,如 **C::raw-latex:`\MinGw*`*,下面修改环境变量时还会用到。 3.修改环境变量: 选择计算机—属性—高级系统设置—环境变量,在系统变量中找到 Path 变量,在后面加入 min-gw的安装目录,如 **C::raw-latex:`\MinGw`:raw-latex:`\bin*`* 4.在开始菜单中,点击“运行”,输入 cmd,打开命令行:输入 mingw-get.exe,如果弹出 MinGw installation manager 窗口,说明安装正常。此时,关闭 MinGw installation manager 窗口,否则接下来的步骤会报错 5.在cmd中输入命令 mingw-get install gcc,等待一会,gcc 就安装成功了。

如果想安装 g++,gdb,只要输入命令 mingw-get install g++mingw-get install gdb

使用

在 cmd 的当前工作目录写 C 程序 hello.c:

# include <stdio.h>
int main()
{
    printf("%s\n","hello world");
    return 0;
}

在 cmd 中输入命令

$ gcc hello.c

在当前目录下会生成 a.exe 的可执行文件,在 cmd 中输入 a.exe 就可以执行程序了。

如果想调试程序,可以输入 gdb a.exe

进入 gdb 的功能,使用 gdb 常用的命令就可以调试程序了。

Mac OSX 及 Linux

从苹果的网站上下载 Xcode 开发环境,并按照安装说明进行安装。一旦安装上 Xcode,您就能使用 GNU 编译器。

使用

打开终端,使用 vim 编辑文件 hello.c

# include <stdio.h>
int main()
{
    printf("%s\n","hello world");
    return 0;
}

使用 gcc 工具进行编译完后,就会在当前目录下生成一个名为 a.out 的可执行文件,手动运行它即可

$ gcc hello.c
$ ./a.out

使用 VS code

在 vscode 中引入标准库的头文件时,会出现波浪线,提示找不到头文件。

解决方法是在当前项目下的 .vscode/c_cpp_properties.json 中的 includePath 列表中添加包含标准头文件的路径,这个路径哪里来呢?你可以使用 everything 搜索一下,哪个路径下有此 stdio.h 文件。

比如我的是这样,注意路径不要使用 \\\ ,一定要使用 \

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "E:/MinGW/lib/gcc/mingw32/8.2.0/include",
                "E:/MinGW/include",
                "E:/MinGW/lib/gcc/mingw32/8.2.0/include/c++/tr1",
                "E:/MinGW/lib/gcc/mingw32/8.2.0/include/ssp",
                "C:/Users/wangbm/AppData/Local/Programs/Common/Microsoft/Visual C++ for Python/9.0/VC/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}

字符串声明定义

字符串声明使用 char

#include <stdio.h>

// 定义 name ,不设置大小
char name[] = "wangbm";

// 定义 gender ,设置大小为7个字节
char gender[7] = "female";

int main()
{
    printf("name is %s\n", name);
    printf("size of name: %lu\n", sizeof(name));
    printf("len of name: %lu\n", strlen(name));

    printf("gender is %s\n", gender);
    printf("size of gender: %lu\n", sizeof(gender));
    printf("len of gender: %lu\n", strlen(gender));
    return 0;
}

字符串操作

  • strcat(s1,s2) :string catenate,连接s2到s1末尾

  • strcpy(s1,s2) :string copy,复制字符串s2到s1

  • strlen(s1) :(string length),返回s1字符串的长度

  • strlwr(s1) :string lowercase,将s1的字符串的字母全部大写返回

  • strupr(s1) :string upercase,将s1的字符串的字母全部小写返回

  • strcmp(s1,s2) :string compare,如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。

字符的输入

使用 printfscanf 函数

# include <stdio.h>

int main(int argc, char const *argv[])
{
    char name[10];
    printf("Enter your name: ");
    scanf("%s", name);
    printf("Your name is: %s \n", name);
    return 0;
}

使用 fgets 和 fputs 函数

# include <stdio.h>

int main(int argc, char const *argv[])
{
    char name[10];
    printf("Enter your name: ");
    fgets(name, 10, stdin);
    printf("Your name is: ");
    fputs(name, stdout);
    return 0;
}

getchar() & putchar()

指针相关的两个符号

记住 * 有3个用途:

  1. 乘号(Multiply): 2*3 就是6

  2. 声明指针(Pointer Statement): int a =5; int* ptr=&a;就是声明变量a是5,把a的地址附到指针ptr上

  3. 解引用 (Dereference): *ptr 单独拿出来就是找出 ptr指针指向的值,按照第二点的说法就是5.

&叫做取地址符号,一般指针只能接受一个内存地址而不能接受一个值

// 如下是错误的,指针不能接受一个值
int a =5; int* ptr=a;

// 如下是正确的,a的地址给指针ptr
int a =5; int* ptr=&a;

可变参数的获取

以下写了一个函数 get_sum 来求得输入的所有参数的和(除了第一个参数外,第一个参数表示,对后面几个可变参数求和,在示例中是作为结束条件存在)。

#include <stdio.h>
#include <stdarg.h>

int get_sum(int n, ...)
{
    va_list arglist;      // 定义一个va_list类型的字符指针,用来指向当前参数,后面取参必须通过这个指针进行
    va_start(arglist, n); // 初始化这个指针,让其指向可变参数里的第一个参数,这里的参数应该填写 ... 的那个参数
    double sum;

    for (int i = 1; i <= n; i++)
    {
        sum += va_arg(arglist, int);
        if (i >= 3)
        {
            break;
        }
    }

    va_end(arglist);  // 养成好习惯,将这个指针关闭
    return sum;
}

int main(int argc, char const *argv[])
{
    /* code */
    printf("The sum is: %d", get_sum(3,1,1,1));
    return 0;
}

image1