【C语言】初始C语言

🐽main 函数

  • 那么,main 函数是什么呢,我们就把 main 函数当成家里的大门,一般来说,家里的大门只有一个,是家的入口,家里可以有很多房间,在C语言中也是一样,一个项目的文件可以有多个,但是main 函数有且只有一个,是程序的入口,因此 main 函数也被称为主函数。
  • 我们在程序中看到 main 函数前面还有个 int,它的意思是,这个函数将返回的整型类型的数据。
c 复制代码
int main() {

	return 0;
}
  • return 0 又是什么呢?这个代码的意思就是返回 0 这个值给这个函数,和main函数前面的int就对应了。return 也代表这个程序的结束,就像一个任务一样,return 0 的意思就是告诉你这个任务完成了。

🐽头文件

  • 头文件我们可以这样理解,假如我们要造车,我们要从头开始,但是如果有设计好的通用方法,我们就不需要从头开始设计,可以使用别人的方法来造车。
  • 那么头文件也是一样,假如我们要使用 printf 这个函数,我们就需要引入 stdio.h 这个头文件,这个头文件中包含了所有 printf 函数实现的所有代码,如果你不使用这个函数来实现打印功能,你就要自己从头开始写这个函数。
  • 因为有很多常用的函数,这些函数由各种厂商来开发的,所以完全不用担心 bug 和稳定性。
  • 由厂商提供的头文件我们通常使用 <> 括起来,如果是自己写的头文件,通常使用 "" 引起来
c 复制代码
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include "func.h"

🐽库函数

  • 为了不在重复实现常见的代码,让程序员提升开发效率,C 语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上一些编译器厂商可能会额外扩展提供部分函数(这些函数其他编译器不一定支持)
  • ⼀个系列的库函数⼀般会声明在同⼀个头文件中,所以库函数的使用,要包含对应的头文件

库函数比较多,后期慢慢来介绍,提前了解可参考链接:https://cplusplus.com/reference/clibrary/

🐽关键词介绍

我们在写程序的时候,一定会用到变量,用变量时,要给变量创建变量名,和给变量赋值,比如:intifreturn ,这些符号被称为 保留字 或者 关键字

c 复制代码
auto break case char const continue default do double else enum extern 
float for goto if int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

注:在 C99 标准中加入 inlinerestrict_Bool_Complex_Imaginary 等关键字

⼀些关键字大家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。

注:https://zh.cppreference.com/w/c/keyword(C语⾔关键字的全部介绍)

🐽字符串和\0

C语⾔中如何表示字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串 ,如:"abcdef",就是⼀个字符串。

字符串的打印格式可以使⽤ %s 来指定,也可以直接打印如下:

c 复制代码
#include <stdio.h>

int main(){
    printf("%s\n","hello C");
    printf("hello C");
    return 0;
}

C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串的结束标志。

对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个 \0 的转义字符, \0字符串的结束标志 。所以我们在使⽤库函数 printf() 打印字符串或者 strlen() 计算字符串长度的时候,遇到 \0 的时候就自动停止了。

C 语言也可以把一个字符串放在一个字符数组里面,我们利用下面的代码验证一下 \0 的功能

c 复制代码
#include <stdio.h>

int main() {
    char arr1[] = {'a','b','c'};  // arr1  数组中存放3个字符
    char arr2[] = "abc"; //arr2数组中存放字符换
    printf("%s\n",arr1);
    printf("%s\n",arr2);

    return 0;
}

这样的代码,调试的时候,观察 arr1 和 arr2 的内容:

我们可以看到, arr1 字符数组在打印的时候,打印了 abc 后还打印了⼀些随机值,这就是因为 arr1 在末尾的地⽅没有 \0 字符作为结束标志,在打印的时候没有停⽌。

但是 arr2 的打印就是完全正常的,就是因为 arr2 数组是使用字符串常量初始化的,数组中有 \0 作为技术标志,打印可以正常停止。

如果我们在 arr1 数组中单独放一个 '\0' 字符会怎么样呢?

c 复制代码
#include <stdio.h>

int main() {
    char arr1[] = {'a','b','c','\0'};
    char arr2[] = "abc";
    printf("%s\n",arr1);
    printf("%s\n",arr2);
    printf("%s\n","abc\0def");
    return 0;
}

看到三次打印的结果是⼀样的了,都是打印到 \0 的时候就停止了,那从上述的例子我们确实能够观察到 \0 的作用和重要性的。

🐽转义字符

也许在前⾯的代码中你看到 \n , \0 很纳闷是啥。其实在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。

比如:我们有字符 n ,在字符串中打印的时候自然能打印出这个字符,如下:

c 复制代码
#include <stdio.h>

int main() {
    printf("abcdef");
    return 0;
}

如果修改一下代码,在 n 的前面加上 \,变成如下代码:

c 复制代码
#include <stdio.h>

int main() {
    printf("abc\ndef");
    return 0;
}

我们可以看到修改的前后代码输出的结果,截然不同的,那这是为什么呢?

这就是转义字符的问题, \n 是⼀个转义字符表示换行的意思,我们可以简单的理解为 \n 的意思发生了转变, n 本来是⼀个普通的字符,被 \ 转义为换行的意思。

C语言中像这样的转义字符还有⼀些,具体如下:

  • \? :在书写连续多个问号时使⽤,防止他们被解析成三字⺟词,在新的编译器上没法验证了。
  • \' :用于表示字符常量'
  • \" :用于表示⼀个字符串内部的双引号
  • \\ :用于表示⼀个反斜杠,防止它被解释为⼀个转义序列符。
  • \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
  • \b :退格键,光标回退⼀个字符,但不删除字符。
  • \f :换⻚符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于 \v
  • \n :换行符。
  • \r :回⻋符,光标移到同⼀⾏的开头。
  • \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
  • \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下一行的同⼀列。

下面2种转义字符可以理解为:字符的8进制或者16进制表示形式

  • \ddd :d d d 表示 1~3个八进制的数字。 如: \130 表示字符 X
  • \xdd :d d 表示2个⼗六进制数字。 如: \x30 表示字符 0

\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,用于字符串的结束标志,其 ASCII 码值是0

代码演示:

c 复制代码
#include <stdio.h>

int main() {
    printf("%c\n",'\'');
    printf("%s\n","\"");
    printf("c:\\test\\code\\test.c\n");
    printf("\a");
    printf("%c\n",'\130');  // 130是8进制,转换成10进制是88,以88作为ASCII码值的字符是'X'
    printf("%c\n",'\x30');  // x30中的30是16进制,转换成10进制是48,以48作为ASCII码值的字符是'0'
    return 0;
}

这些ASCII码值是可以自己写代码验证的,⼤家也可以自己验证。

关于转义字符我们首先要了解,然后要能在字符串中识别出来。

转义字符参考:[https://zh.cppreference.com/w/c/language/escape\](

相关推荐
梓仁沐白2 小时前
csapp实验一:datalab
开发语言
侯小啾2 小时前
【17】C语言-gets() 与 fgets() 函数
c语言·开发语言
罗西的思考2 小时前
【Agent】 ACE(Agentic Context Engineering)源码阅读笔记---(3)关键创新
人工智能·算法
胡桃夹夹子3 小时前
存档111111111
java·开发语言
不会编程的小寒3 小时前
C++ 中string的用法
java·开发语言
想搞艺术的程序员3 小时前
Go Error 全方位解析:原理、实践、扩展与封装
开发语言·后端·golang
闲人编程3 小时前
Python游戏开发入门:Pygame实战
开发语言·python·游戏·pygame·毕设·codecapsule
是苏浙4 小时前
零基础入门C语言之枚举和联合体
c语言·开发语言