Bliner'Site Bliner'Site

高树靡阴,独木不林。


  • 首页

  • 分类 10

  • 标签 36

  • 归档 214

  • 关于我

  • 搜索

标签:C语言笔记

C语言中操作文件-文件类型指针-学习笔记-59

发表于 2018-10-23 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 23

引入

在上节讲的缓冲文件系统中,最关键的概念就是文件类型指针,简称为:文件指针。我们知道,要让程序操作一个文件,都需要将其加载到内存中,但是加载到内存之前,需要现经过缓冲区。所以,每个文件被使用时,都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息。

有关信息包括:文件名、文件状态及文件当前位置等信息

这些信息都是保存在一个结构体变量中的,该结构体类型由系统声明,取名为FILE。

存放文件信息的 FILE

在不同的 C 编译环境中 FILE 的内容可能不完全相同,我们来举个例子,FLIE 的结构体可能是这样的,它包含在stdio.h中:

typedef struct {
short level;   // 缓冲区“满”或“空”的程度
unsigned flags;  //文件状态标志
char fd;   //文件描述符
unsigned char hold;   //如缓冲区无内容不读取字符
short bsize;   //缓冲区的大小
unsigned char * buffer;   //数据缓冲区的位置
unsigned char* curp;   //指针当前的指向
unsigned is temp;   //临时文件指示器
short token;   //用于有效性检查
}FILE;
阅读全文 »

C语言中操作文件-文件分类和文件缓冲区-学习笔记-58

发表于 2018-10-22 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 38

文件的分类

根据数据的组织形式不同,数据文件可以分为:

  • ASCII 文件
  • 二进制文件

数据在内存中是以二进制形式存储的。
如果不加转换,输出到外存,就是二进制文件,
可以认为它是存储在内存的数据的影响,也称之为映像文件。

如果要求在外存上以 ASCII 码的形式存储,需要在存储前将二进制文件转换成 ASCII 文件,又称文本文件,每一个字节存放一个字符的 ASKII 码。

数据在磁盘入怎样存储?

字符:一律以 ASCII 码形式存储。
数值:即可以以 ASCII 码形式存储,也可以以二进制存储。

存储整数 10000
ASKII 码:5个字节(每个字符占 1 字节)
二进制:4个字节

阅读全文 »

C语言中操作文件-文件和文件名-学习笔记-57

发表于 2018-10-22 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 74

引入

只要是会使用计算机的人,对文件一定都不陌生,word 文件、PPT 文件、邮件的附件、照片、视频都是文件。要在程序中操作这些文件,就需要对文件的基础进行了解。

文件是什么

文件有不同的类型,在程序设计中,主要用到两种文件

  • 程序文件: 包括源程序.c文件、目标文件.obj文件以及可执行文件.exe 文件等。这种文件的内容是程序代码。
  • 数据文件: 这种文件的内容不是程序,是供程序运行时读写的数据。包括在程序运行过程中输出到磁盘的数据、供程序读入的数据。如成绩数据或者货物交易记录等。

本章我们主要讨论的是第二种,数据文件。

阅读全文 »

C语言中建立数据类型-使用 typedef 声明新类型名-学习笔记-56

发表于 2018-10-21 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 91

引入

我们知道,数据的类型可以是系统自带的int float char double等类型,也可以是我们自己声明的结构体、共用体、枚举类型等。其实,我们还可以用 typedef 指定新的类型名代替已有的类型名。

替换原有类型

我们用一个新的类型名,替换原有的类型名

typedef int integer;
//指定使用 integer 为类型名,代替 int 使用
typedef float Real;
//是定使用 Real 为类型名,代替 faloat 使用

声明之后,那么下面的内容等价:

typedef int Bliner;
Bliner a,b; 
//上面的内容等价于
int a,b;

方便在自己的程序中使用和方便其他人查看和维护。

阅读全文 »

C语言中建立数据类型-枚举类型-学习笔记-55

发表于 2018-10-21 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 60

引入

如果一个变量,我们只希望它的值在我们指定的值得范围内,例如week,我们只希望值在周一至周日之间,而不是星期八等特殊情况,我们就需要枚举类型。

枚举

如果一个变量,只有可能是几种类型的值,就可以定义为枚举类型。枚举就是把可能的值都列举出来,变量的值,只能在列举的这个值的范围内。
一般形式

enum 枚举类型名 {枚举元素列表}

使用枚举

我们来定义一个 weekday 变量类型

enum Weekday {sun , mon , tue , web , tuhe , fri , sat};
// 声明了一个枚举类型 Weekday , 枚举元素是sun~sat
enum Weekday workday;
// 定义了一个枚举类型变量 workday
workday = mon;  // 合法,mon 是枚举元素之一
workday =sat;  // 合法,sta 是枚举元素之一
workday = second;   //非法,second不是枚举元素之一
阅读全文 »

C语言中建立数据类型-共用体类型数据特点-学习笔记-54

发表于 2018-10-21 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 167

引入

上节,我们学习了共用体,即所有成员的起始内存地址相同。共用体和结构体的定义方法差不多,我们说结构体和共用体最大的区别就是共用体的占用内存长度是成员中占用内存最长的,而结构体则是成员占用内存长度之和。

共用体特点

共用体和结构体有很多却别,那么这些区别造就了结构体和共用体各自什么样的特点呢?

存放成员

共用体是使用同一段内存存放不同类型的成员,但每一瞬间只能存放一个成员,不能同时存放几个。因为在每一个瞬间,存储单元只能有唯一的内容。

union Data{
int i;
char ch;
float f;
}a;
a.i=97;
//我们给 a 这个共用体变量的整型 i 赋值97
printf("%d\n",a.i);  //输出97
printf("%c\n",a.ch);  //输出「a」
printf("%f\n",a.f);  // 输出0.000000
阅读全文 »

C语言中建立数据类型-共用体类型和共用体变量-学习笔记-53

发表于 2018-10-20 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 62

引入

如果想在一段内存单元,存放不同类型的变量,如

整型
字符型
实型变量

存放在同一个地址开始的内存单元。 该怎么办?

这时,就需要共用体类型,整型、字符型、实型变量所占用的字节数是不同的,如果要在同一个内存地址开始,势必意味着后一个数据要覆盖前一个数据。

我们称这种使几个不同的变量共享同一段内存的结构,为共用体类型的结构。

共用体也可以顾名思义,共用一段内存开始地址的共用体

共用体类型

一般形式

union 共用体名
{
成员表列
} 变量表列; (注意有分号)

如:

union Data{
int i;
char ch;
float f;
}a,b,c;
阅读全文 »

C语言中建立数据类型-输出动态链表-学习笔记-52

发表于 2018-10-19 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 50

引入

一句话,输出动态链表,就是输出链表中的各个节点。

例子引入

上一节,我们已经大概知道了,如何使用头指针输出第一个结点,那么该如何输出其它结点呢?我们来写一个输出链表的函数 print。

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student{
long num;
float score;
struct Student *next;
};

int n;

struct *Student create(void){
struct Student *p1,*p2,*head;
p1=p2=(struct Student*)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
while(p1->num!=0){
n=n+1;
if(n==1){
head=p1;
}else{
p2->next=p1;
}
p2=p1;
p1=(struct Student*)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next=NULL;
return (head);
}

void print(struct Student *stu){
//传递过来的是 head 头指针
do{
printf("\n学号:%ld\n成绩:%3.1f\n\n",stu->num,stu->score);
stu=stu->next;  //如果 stu 指向的是 NULL,方便停止。
}while (stu->next!=NULL);
}

int main(){
struct Student *pt;
pt=create();
print(pt);
return 0;
}
阅读全文 »

C语言中建立数据类型-建立动态链表-学习笔记-51

发表于 2018-10-19 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 39

引入

上一节,我们讲了如何建立一个静态链表,今天我们就来说说如何建立一个动态链表。还记得他们的区别吗?

静态链表
所有结点都是手动创建的,不是程序创建的。
不能随时创建和随时释放。

动态链表

在程序执行过程中,从无到有地建立起一个链表,即一个一个地开辟结点和输入各个结点数据,并建立起先后相连的关系的链表为动态链表。

例子引入

建立有3名学生的单向动态链表

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)

struct Student{
long num;
float score;
struct Student *next;
};

int n;

struct Student *create(void){
struct Student *p1,*p2, *head;
p1=p2=(struct Student *)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
while(p1->num!=0){
n=n+1; 
if(n==1){
head=p1;
}else{
p2->next=p1;
}
p2=p1; 
p1=(struct Student *)malloc(LEN); 
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next =NULL; 
return (head); 
}

int main(){
struct Student *pt;
pt=create(); 
printf("\n学号是:%ld\n成绩是:%3.1f\n",pt->num , pt->score);
return 0;
}
阅读全文 »

C语言中建立数据类型-链表以及建立简单静态链表-学习笔记-50

发表于 2018-10-18 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 41

引入

如果学习过数据结构,就会知道,链表是一种常见的重要的数据结构。它是动态的进行存储分配的一种结构。
在前面的学习中,我们知道,用数组存放数据时,必须线定义数组长度,也就是数组中元素的个数。
那么如果我们用来存储班级人数,有的班级100人,有的班级30人,那么为了能放下100人的数据,我们必须设计一个100个元素的数组。显然,这会浪费很多内存。
链表,就没有这种缺点,它根据需要开辟存储单元。

链表

我们先来看一个链表

  • head :表示链表中的头指针变量。它存放一个地址,该地址指向一个元素。链表中的每一个元素,称为结点;
  • 节点 :表示链表中的每一个元素,每个结点都应该包含两个部分:
    1.是用户所需要用的实际数据
    2.是下一个结点的地址。

上面的图中,head 是头指针,指向第1个元素
第1个元素指向第2个元素,以此类推
直到最后一个元素,该元素不再指向其它元素,它称为表尾
表尾的地址部分存放的地址为:NULL
链表到此结束

阅读全文 »
上一页 1 2 3 ... 7 下一页
Bliner

Bliner

214 日志 10 分类 36 标签
RSS

推荐阅读

关于GTD中项目“复盘”的一想法
© 2008 - 2026 Bliner
鲁ICP备13021673号