C语言里结构体的问题。结构体定义指针类型是怎么回事?

C语言里结构体的问题。结构体定义指针类型是怎么回事?,第1张

typedef 是重定义的意思,这里表示HuffmanCode是一个char类型的代名词。
char可以理解为指向一个字符串第一个字符的指针
char可以理解为字符串数组,
char a = new char [10];
for (int i = 0; i < 10; i++) a[i] = new char [30];
这就创建了一个a,a[n]代表第n+1个字符串,a[n][m]表示第n+1个字符串的第m+1个字符。
typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
} HTNode,HuffmanTree;
是用HTNode表示这个结构体,HuffmanTree表示这个结构体的指针类型。这样使用HTNode 定义的变量是结构体类型(空间为4int=16),而用HuffmanTree定义的是可以指向这种结构体的指针(空间为long=4),HuffmanTree与HTNode等价。
HT=(HuffmanTree)malloc((m+1)sizeof(HTNode))
HT=(HTNode)malloc((m+1)sizeof(HTNode))
下面是调用的例子:
HTNode a;
HuffmanTree b;
alchild=0;
b=&a;
b->lchild=0;
calloc也用于动态分配内存,和malloc稍有区别,百度你就知道。

c语言文件类型指针是通过FILE fp; 这种形式进行定义的。

关于FILE结构在VC6中有如下定义:

#ifndef _FILE_DEFINED
struct _iobuf {
char _ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char _base; //指基础位置(即是文件的起始位置) 
int _flag; //文件标志
int _file; //文件描述符id
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //文件缓冲区大小
char _tmpfname; //临时文件名
       };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

C程序用不同的FILE结构管理每个文件。程序员可以使用文件,但是不需要知道FILE结构的细节。实际上,FILE结构是间接地 *** 作系统的文件控制块(FCB)来实现对文件的 *** 作的,如下图:

上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。

文件是存放在物理磁盘上的,包括文件控制块(FCB)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。

相关函数:

FILE fopen( char file, char open_mode ); //打开文件,读文件到内存,返回文件信息结构指针

int fread( char s, int size, int num, FILE fp ); //按字节读取文件内容到s中

int fwrite( char s, int size, int num, FILE fp ); //按字节将s地址中的数据写到文件中

char fgets( char s, int max_size, FILE fp); //读一行数据到缓冲区s中

int fseek( FILE fp, long offset, int whence); //移动文件指针到指定位置

void rewind(FILE fp); //回到文件头

long ftell(FILE fp); //得到当前文件偏移位置

fclose(fp); //关闭文件,刷新缓存到物理磁盘上

1
你这个赋值的错误应该是由于=左右的类型不一致造成的。=左边的p是指针类型,而右边是
数值类型。
指针赋值当然也是要一致才行。但是应该这么验证:
int p; float q; p=&q; //注意q前面的取地址符
2
p+4是先取出p,然后p的值再加4。对于你说的,p应该是数组的第一个元素,也就是'a'
,‘a’加上4就是'e'了。
(p+4)是先计算p+4(此时指针指向了'f'),然后取其值。
3不是一个意思。赋值的话直接用str就行了,如果加上&的话,就会有错误了。
祝你考试顺利~~


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/13309010.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-31
下一篇2025-08-31

发表评论

登录后才能评论

评论列表(0条)

    保存