文件操作学不会?快进来,带你深入理解->C语言文件操作

news2024/11/18 9:41:57

你将收获:
进一步理解缓冲区,以及引申出getchar(),scanf("%c",&c)接收数据时,易踩坑的地方,并对其解释。
w+,r+,a+打开文件后如何正确使用读、写函数。
还有其它收获…

文件

  • 为什么存在
  • 什么是文件
  • 文件的唯一标识符
  • 缓冲文件系统
    • 文件指针
    • 为什么存在文件缓冲区呢?
  • 文件的打开和关闭
    • 打开文件
    • 关闭文件
  • 文件的顺序读写
    • 读写函数
    • fgetc
    • fputc
    • fgets
    • fputs
    • fprintf
    • fscanf
      • sprintf,fprintf,printf,sscanf,fscanf,scanf的比较
    • fwrite
    • fread
  • 文件的随机读写
    • fseek
    • ftell
    • rewind
  • 对于 r+,w+,a+的正确使用
  • 易错的feof
    • ferror
    • clearerr
  • 学完了还等什么,还不操作一下你文件版本的通讯录

在这里插入图片描述

学完了文件操作得熟练熟练,拿通讯录试试手吧~
文件版通讯录

为什么存在

在以往写的程序中,运行程序后,这些数据都是在内存中,当程序运行结束,这些数据也随之消失。有什么方法可以使数据长久存在呢?一起走进文件的世界。

文件的存在的意义是让数据永久性的存储下来,当然永久性的存储不只有文件,还有数据库,数据库又是另一个高级的东西了。

什么是文件

根据功能分类,文件分为程序文件和数据文件。在写c语言程序时,运行前后产生文件的就是程序文件如.c为后缀的源程序文件,.obj为后缀的目标文件,.exe为后缀的,可执行程序。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据文件:文件内容并不一定是程序,而是存放一些数据,这些数据可以被程序读和写。用一个例子来解释下,比如在写通讯录时,已经存一个文件,这个文件中存放了一些数据:张三的个人信息

在这里插入图片描述

在计算机语言中,是指输入是指输出
给定一个情境:在写通讯录小项目时,我需要知道文件中已经存在哪些联系人,并且呢我还需要对这些联系人的信息修改。 这里存在两个问题,怎么知道存在哪些联系人,怎么对这些数据进行修改。

首先,是不是需要将文件中的数据加载到程序中,我们才能进行下一步操作。那怎么加载就能存到程序里呢?我们只要将这些数据存到变量中,程序运行后,这些变量就会在内存中,那么数据也就完成了加载,这一过程就是读。写又怎么体现呢?已经将数据加载到程序中了,我现在想知道有哪些联系人,怎么才能知道呢,是不是要把这些数据打印出来,打印到屏幕上,我就能知道存了哪些联系人,这一过程就是写的过程。
暂且先到这里,下文我将继续以通讯录为例,让你学会这些简单的操作。

根据数据的组织形式,数据文件被称为文本文件或者二进制文件
二进制文件:打开文件是乱码的就是二进制文件,人看不懂,计算机看得懂就可以,类似于这种。

在这里插入图片描述

文本文件:打开文件你认识的一般都是文本文件。
二进制和文本文件浅浅的了解一下就可以了。

文件的唯一标识符

文件的唯一标识符也叫文件名是文件所存放的路径。
文件名包括三个部分:文件路径、文件名主干、文件后缀
相对路径和绝对路径的概念放到文件操作函数中解释,有个具体的例子会形象很多。
注意事项:
文件名并不一定要包含文件后缀。
文件名不能包含一些符号。

在这里插入图片描述

缓冲文件系统

ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块文件缓冲区

文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。先抛出两个概念,待会连起来解释。

在程序中如何去描述文件呢?是否还记得结构体呢。在结构体这篇博客中深度讲了自定义类型。
结构体存在就是用来描述复杂对象的。文件是一个复杂对象,在C语言中也确实是用一个结构体来描述文件的,描述文件的路径、名称、状态等。不同编译器下,结构体中的成员可能不一样。

VS2019中,文件的结构体封装的很好,找不到有效的信息。

在这里插入图片描述

这是在VS2010中的

在这里插入图片描述

以上你只要了解是用一个结构体来描述文件的即可,不用太在意结构体中每个成员的含义。
我们已经知道了文件是一个结构体,那用什么去维护这个结构体呢?在创建一个?不现时,文件是通过文件指针来维护的。通过文件指针和一些文件类函数就可以对文件进行读写操作了。

缓冲文件系统这里我们要深入理解文件缓冲区

文件指针没什么好说的,就是一个指针指向的是一个结构体。文件的结构体类型为:FILE,文件指针的类型为FILE*,可能你还觉得有些抽象,等下讲到函数的时候,你就知道用起来贼容易。文件信息区就是指文件结构体内部成员汇集的信息。

在这里插入图片描述

最主要的还是文件缓冲区,引用linux中一个句话,一切皆文件,c中把文件称流。不管是哪种语言的编译器,编译器都会默认打开三个流(文件)标准输入流,标准输出流,标准错误流,标准输入流—键盘之类的,标准输出流–显示器之类的,标准错误流–通过全局变量errno(记录错误码),和一些函数来控制strerror、perror在这篇博客中有strerror、errno的相关介绍

为什么讲这个呢?不知道你是否还记得刚入门时使用getchar(),scanf("%c",&c)老是细节出错呢?我们可以把那三个标准流的称呼为文件,这样和下面讲的刚好连起来了。
既然标准输入流是一个文件,那是不是需要一个文件缓冲区呢?当然需要,这个缓冲区叫输入缓冲区。我们在键盘上的输入的数据都是先存放在输入缓冲区中的,当缓冲区存满了,或者你按了回车,或者其它条件,都可以触发一次输送。怎么个输送法呢?就是将输入缓冲区中的内容存到内存中去,即存到变量中。

下面浅浅的举一个例子:目的是输入两个数,一个是整形一个是字符型,在输出到屏幕上。但是在键盘上按了123回车,程序就结束了。

要弄明白这些,你还得知道%c输入,和%s输入的不同。%c接收字符,也包括'\n'(回车),%s是不会接收'\n'空格的。

在这里插入图片描述
在这里插入图片描述

这只是一个简单的例子,如果在平时不注重细节的话,可能你都不知道出什么错。

为什么存在文件缓冲区呢?

你可以想象一个场景:你当老师,一个学生每隔一分钟就会来问你一个问题。这时候你就不能处理其他人的问题,只能处理这个学生的问题,是不是效率极低呢?你就会对这个学生说让它过30分钟来问一次,这样你有空间的时间处理其它的事情了。

在计算机中也是如此。当文件系统接收到read或者write的请求时,会向磁盘驱动程序发出指令,磁盘驱动程序接收了指令,又会向硬盘发出指令,在通过一系列的操作,就完成了一次读或者写。如果没有缓冲区存数据,一个数据一个数据的接收,一个数据一个数据的传送,你可以想象这个过程是有多么的繁琐,造成的后果就是效率极低。文件缓冲区的存在就非常有必要了。

文件的打开和关闭

打开文件关闭文件,和喝饮料一样,需要喝,要打开瓶盖,不喝了就把瓶盖盖上。

打开、关闭文件需要配套使用,至于具体原因大体是这样的:还记得刚刚说的文件缓冲区吗,向文件读写数据都是先存到缓冲区中,触发条件后会输送一次,这个关闭文件的操作,也是一个触发条件。有时候可能你少了关闭文件的操作,数据可能会丢失。

打开文件

在这里插入图片描述

返回值:返回一个文件指针。
参数1:文件名
参数2:打开方式
如果打开文件失败会返回一个空指针,因此一般都需要进行一个判断,打开文件是否成功。

FILE* p =fopen("contact.txt","w");
if(NULL == p)
{
     perror("fopen::");//错误提示
     return 1;
}
FILE* p1 =fopen("D:\\Ccode\\contact2.txt","w");
if(NULL == p1)
{
     perror("fopen::");//错误提示
     return 1;
}

通过文件指针p来维护contact.txt文件,通过p1维护contact2.txt文件。

绝对路径和相对路径在这就能很好的理解了。
相对路径是指以当前文件资源所在的目录为参照基础,链接到目标文件资源(或文件夹)的路径。
绝对路径指带域名的文件的完整路径。

"w"的方式去打开文件如果文件不存在,那么会生成一个新文件,如果以"r"的方式去打开文件,文件不存在会报错。下面有张图已经全部汇总了。
新的文件生成在哪呢?根据你在函数中写的文件名来看。p指针,指向的文件是在相对路径下的,这个参照文件是指你正在写代码的这个文件(test.c)的路径下新建一个文件

p1指向的文件是绝对路径的,从磁盘到具体的文件夹下。至于为什么要\\两个,因为\是一个转义字符,要让它普通,得再来个转义字符\,颇有点负负得正的意思。

一个小细节,类型都是char*的,是一个字符类型的指针,指向的是一个常量字符串,所以需要""(双引号)。

在这里插入图片描述

在这里插入图片描述

运行程序后

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

打开方式:

在这里插入图片描述

当然还没结束,这只是开始,需要结合读写函数,才能更深入理解读,写,读写,这些是什么意思,稍后还会深入讲。

关闭文件

在这里插入图片描述

参数:文件指针。传一个文件指针,关闭的是这个文件指针所指向的文件。

fclose(p);
fclose(p1);

通过打开和关闭文件的操作,相信你应该可以浅浅的了解了如何通过指针来管理文件,再看几个读写函数的例子,你就能明白了。

文件的顺序读写

读写函数

在这里插入图片描述

所有输入输出流,也包括标准输入流(stdin)、标准输出流(stdout)标准输入流指从键盘输入,标准输出流是指打印到屏幕上。stdin、stdout类型是文件指针FILE*

在这里插入图片描述

另外要说明一点的是函数中给出的是stream,这个是流的英文,为了方便理解我都会说成文件。

fgetc

作用:从文件中读取一个字符读取失败返回EOF,读取成功就会返回读取到的字符。
读取失败:如果到了文件的结尾或遇到读错误,将返回EOF

在这里插入图片描述

通过一个变量接收这个返回值存入内存,或直接输出。
EOF是什么?是end of file–>文件结束标志,默认用-1表示EOF
FILE* stream:文件指针,该指针指向要被操作的文件

以这个函数为例实现标准输入

在这里插入图片描述

示例:对文件中的字符连续读取。fgetc根据上文提供的图片,可知是以"r"的方式打开文件的。测试的时候可以先在相对路路径下创建好文件,进行读操作。如果没有文件,那么会报错。

先在文件中存了一些数据,连续读取数据,通过函数返回值来控制循环条件。

在这里插入图片描述

注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

仅仅知道这些当然还是不行的,我们还需要理解内部的机制。它为什么能够读取到每个字符呢?通过读写函数对文件进行操作的时候,会存在一个文件指针,它指向文件内部的数据位置,之前所说的文件指针是不同的。

在这里插入图片描述

每次调用fget()之后,这个文件指针会向后偏移一位,直到文件末尾。

在这里插入图片描述

fputc

作用:将character以字符的形式写到文件中,标识符位置向前移动。
文件内部的文件指针指向哪,就从哪开始写入。
返回值:发生错误返回EOF,没有发生错误返回写入的字符的ASCII码值
int character:要写入的字符
FILE* stream:文件指针,该指针指向要被操作的文件

在这里插入图片描述

最后一句话也很好理解,标识符位置就是刚刚说的文件指针,如果这个文件指针指向向文件的起始位置0,写入一个字符,写到0处,这个指针会向后偏移,偏移到1处。
如果这个文件指针指向向文件的位置是1处,写入一个字符,写到1处,这个指针会向后偏移,偏移到2处。

在这里插入图片描述

以这个函数为例,实现标准输出

在这里插入图片描述

示例:向文件中写入26个英文字母。这个时候是写,打开方式需要改变,以w的方式开打文件。
来看一个现象:一开始文件中是有数据的。

在这里插入图片描述

调试:执行完以只写的形式打开文件后,内部数据还会在吗?

在这里插入图片描述

不会在了。由此可以得出结论:以只写的形式去打开文件,可理解为每次都重新生成一个新的同名文件。

在这里插入图片描述

注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

还有一点需要注意的,fgetc、fputc操作的都是字符,以ASCll码值为对应关系。

在这里插入图片描述

通过上面两个例子,相信你应该能很好的理解文件指针是怎么来管理文件的了,就是这么简单。函数参数为文件指针,就可以对文件进行读写等操作。

fgets

作用:从文件中读取一行字符,存到str所指向的字符串中,当读取 (a-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
char* str:str是指针用来接收读取的字符串,更准确的说str是数组名。
int a:读取的个数
FILE* stream:文件指针,该指针指向要被操作的文件
返回值:
如果读取成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。

在这里插入图片描述

为什么读取a-1个字符就会结束呢?因为字符串的结束标志是'\0''\0'需要占一个空间。

为什么说str只能是数组名

在这里插入图片描述
在这里插入图片描述

示例:对读取a-1个字符进行验证
修改文件内容:

在这里插入图片描述

注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

memset对字符串进行初始化操作,这篇博客有memset等相关内存函数的介绍,以及模拟实现

示例2:连续读取多行的数据,可以根据返回值来进行多次读取,也可以通过变量i来控制读取多少行。

更改文件信息

在这里插入图片描述

在这里插入图片描述

整个运行过程是这样的,每次循环读取a-1个字符,即读取1个字符,第一次循环str中存的是i\0,打印i,这个过程中str指向的空间是没有改变的,第二次进入循环数据又会从str[0]开始存入i\0。一直重复,当读取到换行符\n时,str中存的是\n\0,打印的结果就是换行,一直这样重复直到文件结束。

在使用的过程中要注意的是:str指向的空间,必须是大于等于a的

fputs

作用:把str指向空间中的字符串写到文件中。
const char* strstr是指针指向一个字符串,或者是数组名(数组的为char类型的,因为数组名本身就是个地址)
FILE* stream:文件指针,该指针指向要被操作的文件
返回值:该函数返回一个非负值,如果发生错误则返回 EOF

在这里插入图片描述

注意:文件的打开方式要和读写函数配对使用
注意str

在这里插入图片描述
在这里插入图片描述

学好下面两个函数,通讯录的两个操作也就学会了----通讯录文件中的数据加载到程序中,和将程序中的数据保存到通讯录文中。

fprintf

作用:将内存中的数据以格式化的形式写到文件中。
和平时用的printf一样,只多了一个参数—文件指针。
返回值:如果写入成功,则返回写入的字符总数,否则返回一个负数。

在这里插入图片描述

示例:将张三的个人信息填写到文件中
注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

fscanf

作用:将文件中的数据格式化输入,即将数据加载到内存中。
使用方法scanf一样,也是多了一个参数----文件指针。
fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:读取成功返回读入的参数的个数,失败返回EOF(-1)。

在这里插入图片描述

示例:将张三的信息加载到程序中
注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

多次的读写通过循环去控制,在之前的博客通讯录中,介绍了单链表实现,还有顺序表实现的。不同的存储结构,实现循环的方式是不同的,有兴趣的可以看看。

sprintf,fprintf,printf,sscanf,fscanf,scanf的比较

这两个sscnanf、sprintf又是什么呢?看到前缀s,可以推测一下是不是和字符串有关呢?
确实和字符串有关,sscanf将字符串中的数据输入到内存中,sprintf将内存中的数据输出到字符串中。
fprintf、fscanf差不多,文件指针改为字符类型的指针。

在这里插入图片描述

在这里插入图片描述

在使用sprintf时,字符数组需要足够大的空间。不可以使用字符指针,和上面讲的str一样

在这里插入图片描述

在这里插入图片描述
汇总:

在这里插入图片描述

fwrite

作用:把ptr指向的数组中的数据写到文件中 。
ptr 是指向要被写入的元素数组的指针。
size 是要被写入的每个元素的大小,以字节为单位。
count 是元素的个数,每个元素的大小为 size 字节。
stream 是文件指针,指向一个文件

ptr是类型是void*,因为这里操作都是以字节为单位,通过个数来控制写入的数据。

在这里插入图片描述
示例:

存入4个整形
注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

不要奇怪为什么文件里是个乱码,因为fwrite会把数据以二进制的形式写到文件中,计算机看的懂就阔以。

fread

作用:将文件中的数据读取到ptr指向的数组中。
ptr 指向一个数组,这个数组最小有 size*count 字节的内存空间。
size 是要读取的每个元素的大小,以字节为单位。
count 是元素的个数,每个元素的大小为 size 字节。
stream 是文件指针,指向一个文件

这里ptrvoid*,原因和上面一样。

在这里插入图片描述

示例:将上面fwrite的数据在读取到内存中。
注意:文件的打开方式要和读写函数配对使用

在这里插入图片描述

看到这,你以为就掌握了吗,还没有呢,重点的还没讲完,需要学完下面的函数才能去了解w+r+a+方式打开时如何正确操作文件。

文件的随机读写

fseek

还记的上述讲的一个文件指针吗,指向文件数据中的文件指针。
作用:给定一个origin位置,向前(后)偏移offset个位置
FILE* stream:文件指针指向要操作的文件
offset:以origin为起始位置,偏移offset个位置
origin:由库函数提供选择,有三个选择分别为文件开头,当前位置,文件末尾。

在这里插入图片描述

在这里插入图片描述

这里也有坑需要避过。
示例:先向文件写入abcdef,操作fseek函数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ftell

作用:计算当前文件指针(指向文件内部数据的指针)相对于文件开头的偏移量。
返回值:相对于文件开头的偏移量

在这里插入图片描述
在这里插入图片描述

rewind

作用:使内部文件指针,重新指向文件开头

在这里插入图片描述

对于 r+,w+,a+的正确使用

讲到这里,可以开始去了解a+,w+,r+的使用了。
对于带+的都是可以进行读和写操作,即输入函数和输出函数可以连用,无+只能执行对应操作的函数,比如以w方式打开文件,只能用输入函数,以r方式打开文件,只能用输出函数。

原先文件存在abcd

在这里插入图片描述

r的方式打开文件,进行写操作,但并没有任何效果。

在这里插入图片描述

r的方式打开文件,进行写操作和读操作,没有报错。读操作的函数起作用,写操作的函数不起作用。

在这里插入图片描述

r+方式打开文件

在这里插入图片描述
在这里插入图片描述

上面的问题都和文件指针的指向有关。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于其它函数也是如此。进行读或者写时,要注意文件指针的位置到底在哪,其它函数可能直接报错了,fputs,fgets就是这样。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

对于读写函数同时使用,需要注意文件指针的位置,才能保证不出错。C语言中的写函数是不会对文件原数据进行覆盖的,如果想对原数据进行覆盖需要使用write函数。

易错的feof

为什么说是易错呢?先来了解feof
作用:是检测文件结束符,如果文件结束,则返回非0值,否则返回0
文件结束符是EOFEOF的值是-1

在这里插入图片描述

很多人误把feof用来检测文件是否出错。这不合理,我们可以来看看为什么。

在这里插入图片描述

文件正常读取数据,并没有发生错误,返回的也是0,文件出错,返回的也会是0,存在二义性,所以不可用feof来判断文件是否出错。

ferror

判断文件错误需要用ferror
作用:检测文件是否出错。
如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。

在这里插入图片描述

还需要在介绍一个函数和ferror配套使用的clearerr

clearerr

作用:使文件错误标志和文件结束标志置为0
.假设在调用一个输入输出函数时出现了错误,ferror函数值为一个非零值。在调用clearerr(fp)后,ferror(fp)的值变为0。(feof(fp)同样是这样)
另外,只要出现错误标志、文件结束标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何一个输入输出函数。

在这里插入图片描述
在这里插入图片描述

一般可以这样用

在这里插入图片描述

学完了还等什么,还不操作一下你文件版本的通讯录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【FLASH存储器系列一】非易失性存储器基本原理之EPROM

1非易失性器件的存储原理 1.1最小存储单元-浮栅晶体管 我们当前使用的非易失性存储器的基本存储单元基本都是浮栅晶体管。技术在发展,浮栅晶体管的结构也在调整演进,接下来将用系列文章中的三篇分享EPROM、EEPROM、FLASH这三种非易失存储器件的基本存储…

麒麟系统开发笔记(九):在国产麒麟系统上搭建宇视摄像头SDK基础环境Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/127532255 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

链路状态路由协议 OSPF (二)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.Router ID 1.什么是Router ID 2.获得Router ID方法 二.DR和…

每日一题(day9)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录俩到经典题目一、走方格的方案数题目描述解题分析代码演示二.另类加法题目描述:解题分析常见的位运算代码演示总结俩到经典题目 一、走方格的方案数 题目…

【小嘟陪你刷题14】二叉树的最小深度、二叉树的所有路径、翻转二叉树

目录一、二叉树的最小深度思路一:深度优先搜索代码实现思路二:广度优先搜索代码实现二、二叉树的所有路径思路一:递归法代码实现思路二:迭代法三、翻转二叉树思路一:递归法代码实现思路二:迭代法代码实现一…

controller传输from-data数据格式的内容,取出传入数据为from-data格式的值

传输from-data数据格式的内容 postman里面的格式如下 接下来,便将上面的内容转换为代码 第一步:将File转为MultipartFile格式 首先,我们只能将File转为改格式才能进行网络传输,转换方式请看这篇博客:https://blog.…

推动行业数字化转型,亚马逊云科技自身就是“好把式”

(亚马逊全球副总裁、亚马逊云科技大中华区执行董事张文翊) 在2022年10月的亚马逊云科技中国峰会上,亚马逊云科技宣布了四大战略举措——“连中外、襄百业、携伙伴、促绿色“,进一步为中国本地客户赋能数字化探索与创新&#xff0…

顺序表实现—数据结构

文章目录一、顺序表概念及结构二、动态顺序表和静态顺序表的选择三、动态顺序表的实现逻辑(1)创建结构体(2)具体函数实现(*)顺序表初始化(*)释放顺序表(*)打印…

青少年python系列 21.turtle库绘制一个8

#绘制一个8import turtle#上方的小圆,圆心在左turtle.circle(80)#下方的大圆,圆心在右turtle.circle(-100)turtle.done() 青少年python教学视频ppt源码 青少年python系列目录_老程序员115的博客-CSDN博客 csdn文章推荐受影响解决办法10个字10行 csdn文…

梦开始的地方—— C语言指针入门

文章目录指针入门1.指针概念2. 指针和指针类型3. 野指针造成野指针的原因如何避免野指针4. 指针的运算指针加减整数指针的运算关系指针的关系运算5.指针和数组6. 二级指针7. 指针数组指针入门 1.指针概念 指针(Pointer) 是编程语言中的一个对象,利用地址&#xff…

31、Java——JDBC实现账号密码登录

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分…

Kong自动注册kong-spring-boot-stater

前言 kong-spring-boot-stater框架是为了解决SpringBoot项目和kong网关的自动注册,虽然Kong网关有提供可视化管理后台的操作界面,但是在多服务、多环境的时候在管理后台挨个配置每个服务节点是比较麻烦的,所以这也是kong-spring-boot-stater…

P3654 First Step (ファーストステップ)——暴力枚举

First Step (ファーストステップ) 题目背景 知らないことばかりなにもかもが(どうしたらいいの?) 一切的一切 尽是充满了未知数(该如何是好) それでも期待で足が軽いよ(ジャンプだ!&#xff09…

项目流程管理工具:OmniPlan Pro 4 中文

如何更好的管理项目流程?OmniPlan Pro 4中文是个很好的帮手,非常好用的项目流程管理工具, 强大的规划,管理复杂性: 引入三个新的内置模板:标准项目、标准项目(样式)和简单项目。 …

【TA】Unity角色二次元风格渲染

NRMToonLitSample Author : 文若 我的Demo地址 : NRMToonLitSample 学习视频地址 : Kerry大佬的 技术美术实战培训课程——卡通人物渲染方案 文章目录NRMToonLitSample1. 模型贴图基本信息2. 基础渲染效果2.1 基础shader Toon2.2 光照模型效果第一步&…

【从零到一的Raspberry】树莓派踩坑实录(一)系统安装与简单开发

写在前面 本系列作为树莓派上手记录,同时将本人的踩坑以及参考进行记录汇总,必要时罗列出小组分工,作为《嵌入式软开》小组参考文件。 0 硬件准备 名称描述树莓派3B支持wifi,包含了散热器、外壳、电源线等配件网线感谢王emo同学…

【小程序websocket前后端交互】uniapp写微信小程序聊天功能功能,websocket交互功能,心跳重连【详细注释,复制即用】

前言 这几天在做的一个需求,就是要写一个小程序端的页面,用于跟客服聊天。 然后就用到了websocket技术,以前我做过网页版的,但是做小程序后发现网页版的逻辑放过来没问题,但是很多的方法和api是不生效的,所…

立方体的表面积 长方体的表面积 公里转换为米 温度对照

立方体的表面积 难度&#xff1a;青铜 时间限制&#xff1a;1秒 占用内存&#xff1a;64 M 输入立方体边长&#xff0c;输出立方体的表面积。不考虑非法输入。格式 输入格式&#xff1a;输入实型 输出格式&#xff1a;输出实型 #include<bits/stdc.h> using namespace s…

万字长文的CSS与JavaScript简易学习

近期学习web笔记&#xff0c;可供参考 目录 css: css导入方式&#xff1a; css选择器&#xff1a; javascript: javascript介绍&#xff1a; js引入方式&#xff1a; js书写语法&#xff1a; js变量&#xff1a; 5种原始类型&#xff1a; 运算符&#xff1a; JavaScr…

推荐一款基于.Net Core开发简约漂亮的 WPF UI库

今天给大家推荐一个开源WPF UI库。 项目简介 这是一款使用简单、UI评论的WPF UI库&#xff0c;借鉴了多个开源框架。UI简单清晰、大气。 技术架构 1、跨平台&#xff1a;这是基于.Net Core开发的系统&#xff0c;可以部署在Docker, Windows, Linux, Mac。 2、开发环境&…