C语言笔记第1篇:初识C语言

目录

1、C语言是什么?

2、C语言的历史和辉煌

3、编辑器的选择VS2022

3.1 编译和链接

3.2编译器的对比

3.3 VS2022的优缺点

4、VS项目和源文件和头文件介绍

5、第一个C语言程序

6、main函数

7、printf和库函数

7.1 printf函数功能详解(个人理解,如有错误,求指正)

7.2 头文件详解

7.3 什么是库函数?库函数是怎么来的呢?

8、关键字介绍

9、字符和ASCII编码

10、字符串和 ' \0 '

11、转义字符

12、语句和语句分类

12.1 空语句

12.2 表达式语句 

12.3 函数调用语句

12.5 控制语句

13、注释是什么?为什么写注释?

13.1注释的2种形式

13.2注释会被替换


以下所使用图片素材均来自 比特就业课

1、C语言是什么?

人与人交流用的是自然语言,例如:汉语、英语、日语。

那人与计算机之间该怎么交流呢?使用计算机语言。

计算机语言有上千种,例如:c / c++ / Java / Python / Go 等等... 其中就包括我们熟知的C语言。

计算机语言和自然语言一样拥有多种不同的语言,我们可以使用各种语言与其他人交流,计算机语言也一样。

所以C语言是众多计算机语言中的其中之一种语言。

2、C语言的历史和辉煌

C语言最初作为Unix系统的开发工具而发明的。

C语言的历史发展8857e6fddfb14eb2a4aac90fd74f679d.jpeg

3、编辑器的选择VS2022

3.1 编译和链接

C语言是一门编译型计算机语言,C语言源代码(.c为后缀的源文件)是文本文件,文本文件本身无法执行,必须经过编译器翻译(将每个源文件单独处理生成.obj为后缀的目标文件)和链接器链接(将多个目标文件和库文件链接在一起)最终生成二进制的可执行文件(.exe)才能执行,执行的意思等价于运行。

注:目标文件和库文件都是二进制文件,因为计算机只能识别二进制指令,所以要将源文件(文本文件)翻译成目标文件(二进制文件),再将目标文件和库文件这两个二进制文件进行链接生成最后的可执行文件,可执行文件就是计算机能够识别的二进制指令,所以将源文件生成可执行文件后才可以运行。

重点

库文件的介绍: 链接库也就是库文件,分为静态链接库和动态链接库,是包含已编译好的可重用代码和函数的文件集合。

静态链接:在静态链接中,静态库中的代码会被直接复制到最终的可执行文件中。这样,可执行文件包含了所有它用到的函数的机器码,因此可以直接执行,但这也可能导致可执行文件体积较大,且存在代码重复的问题。

动态链接:在动态链接中,可执行文件仅包含它用到的函数入口地址的一个表,而不是整个机器码。在运行时,操作系统会将动态库中的函数代码加载到内存中,这样可执行文件体积更小,且多个进程可以共享同一份动态库,节省了内存和磁盘空间。

C语言代码是放在.c为后缀的文件里,.c为后缀的文件称为源文件,.c本身就是文本文件,无法直接运行,所以要得到最终运行的可执行程序,中间要经过编译链接两个过程。

一个工程一般会有多个源文件组成,如下图所示,演示了源程序在经过编译器和链接器处理的过程

03fb68064f764f28ab4a2168b47600e4.jpeg

注:

1、每个源文件(.c)单独经过编译器链接生成对应的目标文件(.obj文件)

2、多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)

结论:链接库是指包含已编译好的可重用代码和函数的文件的集合。链接库包含了已经编译成二进制的代码,可以在程序运行时被动态地加载到内存中,并提供给程序使用。

3.2编译器的对比

C语言是一门编译型语言,所以需要编译器将计算机语言转换成计算机可执行的二进制机器指令,那我们常见的C语言编译器都有哪些

比如:msvc、clang、gcc就是一些常见的编译器,但是这些编译器在编译代码时是命令行式的,需要手动输入命令来进行编译,非常不方便。为了方便后来就开发了集成开发环境(IDE) 例如:VS2022、Xcode、CodeBlock、DevC++、Clion等... 不用再手动输入命令来完成编译,可以通过一个按键就直接进行了编译和链接,非常方便,当然,集成开发环境不仅仅只有这一个优点。

那什么是集成开发环境(IDE)?

集成开发环境 (IDE) 是用于提供程序开发环境的应用环境,一般包括代码编辑器、编译器、调试器和 图形用户界面 等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

417b863eb368453b8bd70c44122b3dd8.jpeg   VS2022集成了MSVC (编译器) (安装包较大一些,安装简单,无需多余配置,使用起来非常方便)

c37764edcff2461f953ec55e6da91856.jpegXCode集成了clang (苹果电脑的开发工具)

17c75a45209644109cc9125c7e719a2d.jpegCodeBlocks集成了gcc (这个工具比较小众,需要配置环境,不太推荐)

6a104c7f5712454eb3f6f301d12926ca.jpegDevC++集成了gcc (小巧,但是工具过于简单,对于代码养成风格不好,一些竞赛使用)

8263889a137f4b7b94b4b7e64e91b317.jpegClion是默认使用CMake,编译器是可以配置的 (工具是收费)

3.3 VS2022的优缺点

优点:

  • VS2022是一个主流的集成开发环境,企业使用较为普遍
  • VS2022包含了:编辑器+编译器+调试器,功能强大
  • 直接安装即可使用,基本不需要额外配置环境,上手容易
  • 默认界面是中文的,对初学者友好

缺点:

  • 功能丰富,安装包大,占用空间多

4、VS项目和源文件和头文件介绍

VS项目:

打开VS时需要新建项目,新建项目选择空项目,然后可以给项目取一个名称,再选择一个文件路径来保存这个项目,以后要找这个项目时可以点开保存项目的文件使用项目

源文件和头文件:

创建好VS项目后就可以在此项目里新建源文件或头文件,源文件是用来编写代码和实现函数定义的,头文件是用来定义函数声明。

5、第一个C语言程序

#include <stdio.h>  //头文件

int main()
{
    printf("hello world\n");  
    return 0;
}

在VS2022上运行代码的快捷键:ctrl+F5 (直接将代码编译和链接生成可执行程序并把结果输出在屏幕上,简称为运行)

6、main函数

每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,所以main被称为:主函数,main前面的int表示main函数执行结束时需要返回一个整形类型的值。所以main函数最后写return 0; 前后呼应。

  • main函数是程序的入口
  • main函数有且只有一个
  • 一个项目里不管有多少.c文件,但是main函数只能有一个(main函数是程序的入口)

7、printf和库函数

在上面有一条代码:

printf("hello world\n");

代码中使用了printf函数,可以在屏幕上进行打印。

printf分为print(打印)和format(格式),所以printf是按照格式打印数据。

这里简单的来介绍一下printf函数,printf是一个库函数,对应的头文件是#include<stdio.h>,它的功能是在标准输出设备(一般指屏幕)上进行信息打印。上面使用printf函数打印了一串字符串。只要想打印一串字符就将它放进双引号内并传递给printf函数,printf函数可以将这串字符串打印到屏幕上

注:每个库函数的定义都是在库文件上实现的。

printf函数也可以用来打印其他类型

int a = 10;
printf("%d\n",a);     //打印整形
printf("%c\n",'z');   //打印字符
printf("%lf\n",3.14); //打印浮点型

上面代码中的%d、%c、%lf 是占位符,想要printf在屏幕上打印不同类型的值,就需要对应的占位符。例如:%d是以整形的形式进行打印,%c是以字符的形式进行打印,%lf是以浮点(小数点)的形式进行打印。可以理解为给后面的值占个位值,后面的值可以替换它。(占位符后面会记)

以下方框内的是我个人理解的printf函数的功能详解,如果只想知道printf怎么用就行,不想了解printf的功能原理可以直接跳过。

7.1 printf函数功能详解(个人理解,如有错误,求指正)

注:printf函数它打印在屏幕上的不管是整形、字符、还是浮点型的值,都是转换成字符串的将值打印到屏幕上。为什么?如果看printf("hello world\n");和printf("%s\n","hello world");  这样来看是不是发现字符串可以用占位符的方式来打印,也可以直接放进双引号中打印,因为它本身就是字符串。那如果创建一个整形变量,例如:int a = 10;  那printf("a\n");的打印方式就不成立了,但是printf("%d\n",a);就可以,这又是为什么?因为库函数里printf函数的声明: int printf(const char* format);  它的参数是常量字符串,使用printf的时候称为函数调用,如果你调用该函数需要给它传的参数也就是常量字符串,占位符的作用是将printf实参后面的值转换为此占位符所对应格式的字符放进字符串中,比如%d可以将后面的整形10转换为%d整形格式字符‘ 1 ’和‘ 0 ’存入字符串中传递给printf来打印,比如printf("%d\n",10);--->printf("10\n"); printf打印结果:10,因为printf函数是int类型的,所以printf函数的返回值为字符串中的字符个数。

通过上面的讲解得到了以下总结:

1. printf是将括号里的值以字符串的形式在标准输出到设备(屏幕) 上。

2. 占位符只是决定让值以什么格式放进字符串打印,意思就是可以将后面的值以所对应的格式存进字符串,比如:值为整形65,如果用%d占位符,可以将65拆分为两个字符‘ 6 ’和‘ 5 ’的格式存进字符串“65”,给值在字符串里以整型形式呈现。如果以%c字符的形式存进字符串就会将65当做ASCII码值找到这个码值对应的字符存入字符串,65在ASCII编码(关于ASCII编码后面会记) 中对应的是字符‘ A ’,就是将值以字符形式存储,最后会将“A”作为参数传递给printf函数,想要打印出正确的值,前提是后面值的类型必须与占位符相对应,例如:%d整形、%c字符型、%lf浮点型,警告:如果占位符处理的类型和值的类型不对等可能会打印出不一样的值 。

3. 打印在屏幕上的值基本上都是多个字符组成的字符串呈现给人们

所以人们常说的,例如%d是以整形的形式打印,意思是%d可以处理32位整形的二进制,取出整形的值并以整形的格式将值转换成字符放入字符串,再将字符串传递给printf函数将它输出到屏幕上。

4.printf库函数也是有返回值的,正确返回时返回的是字符串中的字符个数,错误就返回-1。

如果以上的内容不理解,那就只需要理解对应的占位符可以打印对应的数值,知道printf库函数和占位符的大概的功能和使用方法就行,个人感觉没必要深挖。

7.2 头文件详解

printf是个库函数,库函数需要包含相应的头文件

#include<stdio.h>

头文件解析:

这个头文件的#include是预处理,是用来包含头文件的。这个"<>"括号里的的stdio.h是一个,头文件名,.h后缀代表头文件,stdio是英文 (standard(标准) input(输入) output(输出)) 的缩写,全名“standard input output(标准输入输出)”,所以每个被调用的标准输入输出函数都会通过该头文件里对应的函数声明到库文件(标准库)中找到函数的定义并使用。#include<stdio.h>里的“<>“表示是标准库里的头文件。#include“stdio.h”表示个人创建的头文件,如果调用一个函数会先到个人创建的头文件里找函数声明,如果未找到,便会自己到标准库里去找。

头文件不止#include<stdio.h>这一个,还有多个类型的库函数需要包含的头文件,比如#include<math.h>,该头文件里定义的是所有关于math(数学)函数的声明。关于输入输出的函数会声明在一个头文件中,关于数学的函数会声明在另一个头文件中。所以想调用一个库函数,必须包含对应的头文件,才能在对应函数的头文件找到该函数的声明并调用。

7.3 什么是库函数?库函数是怎么来的呢?

库函数是由C语言标准规定的一些函数,是由不同的编译器厂商提供的库函数。比如printf就是库函数。C语言规定一些函数的标准,例如需要什么函数,函数的功能是什么。所以C语言本身是不提供函数只提供函数的实现标准的,我们所使用的的那些库函数都是由C语言的编译器厂商根据C语言所提供的标准实现的。

比如我们熟知的VS,它的库函数是由微软提供的。Xcode是由苹果提供的。他们就是根据C语言规定的函数标准去实现这些函数放在编译器中供用户使用。

这些函数比较多,所以这些函数会集成在一起,被称为标准库,这些函数就是库函数(这些函数在其他编译器不一定支持)。

虽然每个编译器的厂商他们的函数实现的功能和使用方式一模一样,但是函数的实现细节可能略有差异。

8、关键字介绍

关键字是C语言中一批保留的名字的符号,比如:int、if、return,这些符号被称为保留字或者关键字

  • 关键字都有特殊的意义,是保留给C语言使用的。
  • 程序员自己创建标识符(定义变量名时和#define定义名称时)的时候是不能和关键字重复的。
  • 关键字也是不能自己创建的

例如:

#define goto 200    //#define定义时使用关键字作为名称
int main()
{
    int const = 0;  //变量名是关键字
    return 0;
}
     //这些都是不被允许的

C语言32个关键字如下:

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

以上32个关键字是使用次数较多的常用关键字

注:在C99标准中加入里inline、restrict、_Boot、_Comploex、_Imaginary等关键字。

9、字符和ASCII编码

键盘中可以敲出各种符号,例如:' a '、' A '、' # '、' @ '、' 4 '  等这些被称为字符。每个字符都有一个ASCIi编码。那为什么要有ASCII编码这个概念?

大家都知道字符是以二进制的形式存入内存中,我自己给每个字符创建了一个编码(每一个字符都设计一个二进制序列,这个叫做编码,例如:0001-' a '、0002-' b ')  我可以通过我设计的编码来使用字符,但是有一个缺陷就是这个编码对应的字符只有我自己知道,别人也有一套自己给字符设计的编码,在于别人通信时造成了信息不对等,为了解决这个问题,后来美国国际标准学会(ANSI)  出台了一个标准ASCII编码,C语言中的字符就遵循了ASCII编码的方式。

ASCII里的字符都是以0--127的十进制的数字表示,也叫编号。以编号的二进制存入内存中叫做编码,共128个字符。

ASCII码表:

 5d3c2e9e05164db0a1a568d9bfeeb496.png

如果细心观察就会发现ASCII码表里的字符都是英文字符,这是因为ASCII码表是美国人发明的,所以都是英文字符。所以当C语言适用于亚洲和欧洲时,发现一些语言符号不能简单的用ASCII编码的0-127来表示,所以后来人们又在ASCII码表的基础上又扩展了128个字符,ASCII码表后面还有一个扩展表,扩展表中规定了亚洲地区的字号编码128--255,共有256个字符。

但是C语言又在亚洲各个地区开放导致256个字符编码都不够用,后来又衍生出了各种各样的编码,比如国内汉语用的比较多的编码是GB2312

我们不需要记住所有的ASCII码表中的数字,使用时差看就可以,不过我们最好能掌握几组特殊数据。

  • 字符A-Z的ASCII码值范围65-90
  • 字符a-z的ASCII码值范围97-122
  • 对应的大小写字母(a和A)的ASCII码值的差值是32
  • 数字字符0-9的ASCII码值范围48-57
  • 换行 '\n' 的ASCII码值是:10

打印ASCII里所有字符的代码

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=32;i<=127;i++) //循环范围是32-127
    {
        if(i%16==0)  //判断i此时是不是16的整数倍
        printf("\n");  
        printf("%c ",i);  //将数字以%c(字符)形式打印
                          //会将数字所对应ASCII码值的字符放进去打印
    }
    return 0;
}

结果:

 6115754181d7423685d13db9960c4f2a.jpeg

前32个ASCII码值之所以不打印是因为它们是类似 ' \n '的字符,无法靠打印显示出来

10、字符串和 ' \0 '

字符串介绍:

单引号括起来的叫做字符,例如:' a ' , ' 1 ' , ' & ' 这些 由单引号括起来的叫做字符。那字符串又是什么? "hello world"这种由双引号括起来的多个字符被称为字符串。字符串可以理解为多种字符串成了一串,就叫字符串。

' \0 '介绍:

' \0 '是字符串的结束标志。

每个字符串的内容不止表面的几个字符,例如 "hello",它实际上存储了6个字符,为什么?

这是因为每创建一个的字符串结尾都有一个结束标志 ' \0 ',因为程序在内存中读取字符串时,是从前往后一个一个读取的,所以最后需要额外存储一个结束标志,程序读取到最后读到结束标志' \0 '就会停止往内存后面继续读取,因为后面的内存不属于字符串的开辟的内存范围了,往后继续读取读到的只是乱码。

注:' \0 ' 只是作为结束标志存储在字符串中的,所以不会显现出来,所以我们看不到结束标志,但是在创建字符串时需要额外开辟一个字节的空间用来存储' \0 '。

#include <stdio.h>
int main()
{
    char str1[] = "hello";  //创建字符数组
    char str2[] = {'h','e','l','l','o'};
    printf("%s\n",str1);
    printf("%s\n",str2);
    return 0;
}

字符数组可以存储多个字符和字符串,以上代码说明字符数组可以使用这两种方式存储字符,但是打印的结果是不是一样的?答案是不一样。因为在创建str1时初始化的是字符串,字符串是结尾自带结束标志。而创建str2时初始化的是字符,是一个一个存储,字符是没有结束标志的,所以str1会打印出" hello ",str2会打印出" hello烫烫烫"(后面打印的是乱码),str2在打印时程序会一直向后读取字符,字符' o '读取结束后程序并未发现结束标志,所以会继续向后读取直到找到' \0 '为止,字符' o '后面的空间不属于str2开辟的,所以向后读取出的就是乱码。

fc08ac542e274ac58cb15765c8f42f86.jpeg

所以str1和str2的区别就是一个有' \0 ',一个没有。

%s是用来打印字符串的,str2里的字符也是连续存放的,所以也可以使用%s打印。

那如果想让str1和str2打印的结果一样,就给str2数组多初始化一个' \0 ',如以下代码

#include <stdio.h>
int main()
{
    char str1[] = "hello"; 
    char str2[] = {'h','e','l','l','o','\0'};
    printf("%s\n",str1);
    printf("%s\n",str2);
    return 0;
}

总结:字符串是有双引号括起来的"多个字符"组成的,结尾会有结束标志'\0'。

11、转义字符

什么是转义字符?比如刚学过的' \n '或者' \0 '这种就叫做转义字符

转义字符顾名思义就是转变意义的符号,比如我有一个数字字符' 0 ',但是当我给这个字符前面加上右斜杠' \ '后,就是' \0 ',意思就从字符' 0 ' 转变为' \0 '字符串结束标志,这种就叫做转义字符。

ab3e86171b26482e9b214389098cc9ed.jpeg看上面的两种代码打印的结果是不是不同,这是因为转义字符,仔细观察会发现一个字符串中是字符' n ',将字符' n '打印在了屏幕上。而另一个字符串中是' \n '转义字符,此时字符' n '变成了' \n '换行,所以可以看到两段代码输出结果各不相同。

转义字符列表

  • \?:在书写连续多个问号时使用,防止他们被解析成三字母词,在新的编译器上无法验证

三字母词就是??)--转换-->],??(--转换-->[

  • \':用于表示字符常量'
  • \":用于表示字符串内部的双引号
  • \\:用于表示反斜杠,防止字符被解释为转义字符
  • \a:警报(蜂鸣)
  • \b:退格键,光标回退一个字符,但不删除字符
  • \f:换页符,光标移到下一页,在现代系统上,这已经反应不出来了,行为改成类似于\v
  • \n:换行符
  • \r:回车符,光标移到同一行的开头
  • \t:制表符,光标移到下一个水平制表位,通常是下一个8的倍数
  • \v:垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。

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

  • \ddd:ddd表示1—3个八进制的数字。  如:\130   表示字符X
  • \xdd:dd表示2个十六禁止的数字。    如:\x30   表示字符0

strlen库函数介绍

先给大家介绍一下strlen库函数,strlen全名string length(字符串长度),顾名思义这个库函数就是求字符串长度的库函数,需要包含对应的头文件#include <string.h>,比如我有一串字符串"abcdef",让strlen求一下这个字符串长度。

#include <stdio.h>
#include <string.h>
int main()
{
    int len = strlen("abcdef"); //创建整型变量len,来接收strlen返回的字符长度
    printf("%d\n",len);  //打印结果为6
    return 0;
}

strlen函数的原理就是遇到一个字符就+1,直到遇到 '\0'结束标志为止,所以只会计入' \0 '之前的字符个数。

strlen库函数的返回类型是size_t(无符号整型),因为strlen不可能接收到一个长度为负数的字符串,所以返回类型是绝对的,也就是size_t。严格意义上来讲用int(整型)类型的变量len来接收size_t类型的值是不准确的,我也可以用size_t类型的变量来接收strlen的返回值,例如:size_t  len = strlen("abcdef");  但是也可以用int类型变量来接收strlen的返回值。

下面给一段代码,来算字符长度:

#include <stdio.h>
#include <string.h>
int main()
{
    int len = strlen("c:\test\class111\123.c"); 
    printf("%d\n",len); //结果是多少
    return 0;
}

把一个文件路径当做字符串放进去,求一下这个文件路径的长度,这个字符串长度结果为17。为什么是17呢?里面不是共有22字符吗?这是因为\与字符发生了转义,变为了转义字符。比如上面' \ '与' t '发生了转义,变为了' \t ',它此时就变为了转义字符,被算作一个字符。里面的' \ ' 和' c '结合后虽然不是转义字符,但是会被strlen识别为转义字符,所以会变成' \c ',不是转义字符所以\去除,最后就是' c '(所以如果想让' \ '作为一个普通存入字符串中,就需要' \\ ',注意,这不是注释,而是转义字符,作用就是让' \ '变为一个普通的字符)。后面的'\123'是转义字符,后面是三个八进制位数,它会转换成ASCII码表中对应这个八进制的字符,首先将八进制123转换为十进制数就是83,83作为ASCII码值对应的字符就是' S ',所以'\123'会被替换成' S '。最后的结果也就是17。

以上就是关于strlen的介绍和转义字符功能讲解。

12、语句和语句分类

C语言代码是一条一条的语句构成的,C语言的语句可以分为五类:

  • 空语句
  • 复合语句
  • 表达式语句
  • 函数调用语句
  • 控制语句

12.1 空语句

空语句是最简单的,一个分号就是一条语句,是空语句

#include <stdio.h>
int main()
{
    ;//空语句
    return 0;
}

空语句一般出现的地方是:这里需要一条语句,但是这个语句不需要做任何事,都可以写一个空语句。

12.2 表达式语句 

表达式语句就是在表达式后面加个分号。如下所示:

#include <stdio.h>
int main()
{
    int a = 20;
    int b = 0;
    b = a + 5; //表达式语句
    return 0;
}

12.3 函数调用语句

函数调用的时候,也会加上分号,就是函数调用语句。

#include <stdio.h>
int Add(int x,int y)  //自定义函数
{
    return x + y; 
}
int main()
{
    printf("haha\n");//库函数调用也属于函数调用语句
    int ret = Add(10,20);//函数调用语句
    return 0;
}

12.4 复合语句

一个括号内有多条语句就是复合语句。

#include <stdio.h>
int print(int arr[],int sz) //自定义函数的大括号中的代码也构成符合语句
{
    int i = 0;
    for(i=0;i<sz;i++)
    {
        printf("%d ",arr[i]);
    }
}
int main()
{
    int i = 0;
    int arr[10] = {0};
    for(i=0;i<10;i++)  //for循环的循环体的大括号中就是复合语句
    {
        arr[i] = 10-i;
        printf("%d\n",arr[i]);
    }
    return 0;
}

12.5 控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式 (C语言支持三种结构:顺序结构、选择结构、循环结构),他们由特定的语句定义符组成,C语言由九种控制语句。

1.条件判断句(分支语句):if语句、Switch语句;

2.循环执行语句:do while语句、while语句、for语句;

3.转向语句:break语句、goto语句、continue语句、return语句;

后期做笔记再一一介绍控制语句

13、注释是什么?为什么写注释?

注释是对代码的说明,编译器会忽略注释,也即是说,注释对实际代码么有影响。

注释是给自己看的,也是给别人看的。

好的注释可以帮我们更好的理解代码,但是不要过度注释,不要写没必要的注释。

当然不写注释可能会让后期阅读的人抓狂。

写注释一定程度上反应了程序坐着的素质,建议大家写必要的注释,在找工作时,写代码留下必要的注释也会给面试官留下更好的印象。

13.1注释的2种形式

C语言的注释有两种表示方法。

第一种/*注释*/,可以注释里面的内容。

缺点:不能嵌套注释

第二种//注释,可以注释后面的文字,支持多行注释,推荐使用。

13.2注释会被替换

编译时,注释会被替换为空格,例如hello/*注释*/world,会被分开一个空格hello world。

作者的第一篇C语言笔记写完了,如果以上知识点有哪一点不对欢迎大家前来指正。

d570aec0c37b48c4a6c85b85c3299645.gif

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言指针是C语言中非常重要的概念,它是程序设计中最基本的数据结构之一。指针可以用于在程序中访问和操作内存中的数据,它们是C语言中最强大、最灵活的工具之一。在本笔记中,我们将介绍C语言指针的基本概念和用法。 1. 指针的概念 指针是一个变量,它存储了一个内存地址。在C语言中,每个变量都有一个内存地址,指针可以用来指向这个地址。通过指针,我们可以访问和操作内存中的数据,这使得C语言非常灵活和强大。 2. 定义指针变量 在C语言中,定义指针变量有两个步骤。第一步是声明指针变量的类型,第二步是用"&"符号取得一个变量的地址,并将这个地址赋给指针变量。例如: ```c int num = 10; //定义一个整型变量num int *p; //声明一个指针变量p p = &num; //将num的地址赋给指针变量p ``` 这样,指针变量p就指向了变量num的地址。 3. 操作指针变量 有了指针变量之后,我们可以通过指针变量访问和操作内存中的数据。例如,要访问变量num的值,可以通过指针变量p来实现: ```c printf("num的值为:%d", *p); //输出num的值 ``` 在这个例子中,通过"*"符号来访问指针所指向的内存中存储的值。这个符号被称为“解引用符号”,它可以用来访问指针所指向的内存中存储的值。 4. 指针的运算 指针可以进行加、减运算,这种运算是基于指针的类型和指针所指向的内存的大小进行的。例如,如果定义了一个指向整型的指针变量p,那么p+1将指向下一个整型变量的地址。同样的,p-1将指向上一个整型变量的地址。 此外,指针还可以用来访问数组中的元素。例如: ```c int arr[5] = {1, 2, 3, 4, 5}; //定义一个整型数组 int *p; //声明一个指针变量 p = arr; //将数组的首地址赋给指针变量 printf("arr[0]的值为:%d", *p); //输出数组第一个元素的值 ``` 在这个例子中,将数组的首地址赋给了指针变量p,然后通过解引用符号来访问数组中的元素。 5. 指针的应用 指针是C语言中非常重要的概念,它可以用于很多方面。例如,可以通过指针来动态分配内存空间、访问硬件设备、实现复杂的数据结构等等。 总之,指针是C语言中非常重要的概念,程序员需要深入理解它的概念和用法,才能够在程序设计中发挥其强大的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值