C语言里结构体的问题。结构体定义指针类型是怎么回事?
typedef char **HuffmanCode;
HC=(HuffmanCode)malloc((n+1)*sizeof(char *));
这里的**HuffmanCode; 是什么意思?还有
typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
} HTNode,*HuffmanTree;
这里的,*HuffmanTree 又是什么意思?如果是表示指针的结构体指针吗,那在使用HuffmanTree时它内部的这4个变量是地址还是变量累?
还有就是再接着的程序
HuffmanTree HT;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode))给结构体分配空间为何要这样写。我第一次碰到malloc函数所以也不太清楚。malloc一般怎么使用?在什么样的情况下使用较合适?除了用malloc还能用其他的方法吗? 展开
您好,您的问题是不是有点略多,下面一一为您解答:
1、typedef char **HuffmanCode 实际上是typedef (char *) *HuffmanCode。写成这种形式更好理解, **HuffmanCode是指向指针的指针,这里也可以理解为是指向字符串的指针,因为char*字符数组相当于字符串。
2、*HuffmanTree表示指向结构体HTNode的指针,HTNode是typedef语法指定的结构体的别名,然后*HuffmanTree是在定义结构体的同时定义了指向结构体的指针。
3、指针只是一个地址,HuffmanTree作为结构体指针同样是一个地址,因此不存在它内部有4个变量一说。严格意义上讲是HuffmanTree这个指针指向的结构体中有这4个变量,而这4个变量和在main函数里定义的普通变量一样,都占用实际内存,在新建结构体的同时为这4个变量分配内存空间。
4、HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode))。这个是malloc的语法,该语句的含义是分配m+1个HTNode结构体占用的内存,将分配的内存地址赋给HT。sizeof作用是判断某个类型所占用的内存空间,此处是计算HTNode占用的空间大小,然后(m+1)*sizeof(HTNode)表示m+1个HTNode,malloc是请求分配内存,(HuffmanTree)是强制类型转化,将得到的内存地址强制转化为HuffmanTree(即HTNode指针类型)。
5、malloc是C语言中常用的动态分配内存的语法,划重点“动态”,当你需要动态申请内存时(例如给数组扩容,还有此处的为结构体申请空间)时用到该语法,C语言中内存相关语法还有realloc,free可以自行了解一下。在C++中new和delete更为常用。