C 语言结构体为什么可以定义自己的指针,和函数指针 ,而不能定义自己类型的变量呢?请教大拿

作者&投稿:池董 (若有异议请与网页底部的电邮联系)
C语言里结构体的问题。结构体定义指针类型是怎么回事?~

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 定义的变量是结构体类型(空间为4*int=16),而用HuffmanTree定义的是可以指向这种结构体的指针(空间为long=4),HuffmanTree与HTNode*等价。
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode))
HT=(HTNode*)malloc((m+1)*sizeof(HTNode))
下面是调用的例子:
HTNode a;
HuffmanTree b;
a.lchild=0;
b=&a;
b->lchild=0;

calloc也用于动态分配内存,和malloc稍有区别,百度你就知道。

结构体定义的过程中,说明还不存在,不存在的东西怎么能定义呢???

建议不要误入岐途,纠结这些定义,技术是要多练习,只研究文字没用的

因为自己类型的变量在这个类型中定义时,是不完整类型,除非你完成定义,不然不会知道这个类型的大小,而且本身嵌套本身,就等于是无穷递归的展开了。

但指针就不同了,C语言的指针大小是4个字节,他只是指向一个地址,和其他的全部无关,他不需要知道自己类型有多大,有怎样的结构什么的,这些都不是他该关心的,他只要指向一个正确的地址就OK了,这就是指针的职责。定义指针是确定,不会影响该类型的结构,也不会出现无穷递归展开,所以在结构体中定义自身指针是合法的。

C语言结构类型变量的定义是分两个步骤完成的:

  1. 步骤一定义结构数据类型,例如:struct dataset { int data1;float data2};

    这个定义仅仅定义了一个结构数据类型的组织形式,定义后它的作用就和系统中的int、float相同,是用来定义变量的说明符。

  2. 步骤二,利用已经定义好的结构数据类型定义结构类型的变量,例如:struct dataset x1,*x2; 这里定义了两个struct dataset 数据类型的变量,x1是结构类型变量,x2是结构类型的指针变量。

  3. 按C的语法规定上述两个步骤也可以在一个语句中完成,但是各自的作用仍然不变,例如:

    struct dataset

    {  int data1,  float data2 } x1, *x2;




馆陶县17866417630: C 语言结构体为什么可以定义自己的指针,和函数指针 ,而不能定义自己类型的变量呢?请教大拿 -
吴子醋酸: 因为自己类型的变量在这个类型中定义时,是不完整类型,除非你完成定义,不然不会知道这个类型的大小,而且本身嵌套本身,就等于是无穷递归的展开了.但指针就不同了,C语言的指针大小是4个字节,他只是指向一个地址,和其他的全部无关,他不需要知道自己类型有多大,有怎样的结构什么的,这些都不是他该关心的,他只要指向一个正确的地址就OK了,这就是指针的职责.定义指针是确定,不会影响该类型的结构,也不会出现无穷递归展开,所以在结构体中定义自身指针是合法的.

馆陶县17866417630: c语言中结构体的优点 -
吴子醋酸: 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型.首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同.第三,节省内存空间 第四,高效率.

馆陶县17866417630: 请问下C语言中的结构体有什么用? -
吴子醋酸: C语言中的结构体可以定义一些复杂数据类型,把一些有内在联系的不同变量放在一起封装成一个整体,这就是结构体. 例如:以学生为例,学生存在学号,姓名,性别,班级等.此时你可以顶一个结构体,将这些学生信息封装到一个结构体中...

馆陶县17866417630: c语言什么叫结构体 -
吴子醋酸: 结构体定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 结构体作用 结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型.以方便日后的使用. ...

馆陶县17866417630: C中结构体在定义时可以定义自身类型的成员吗 -
吴子醋酸: 在c语言的语法中,这样不行 如果你需要初始化 可以这样写 struct stu{ int a; int b; int c;} student = {1,2,3};

馆陶县17866417630: C语言结构体如何使用?
吴子醋酸: 你好: C语言中的结构体,听名字有点吓人,其实不难.下面我给你详细说明: 首先,结构体,是自定义的数据类型,就如int 、 char 、float 这些类型是编译器自定义的类型一样.那么,结构体就是属于自身定义的类型. 这种类型,可以是多...

馆陶县17866417630: 求解答c语言结构体定义中typedef的作用 -
吴子醋酸: c语言结构体定义中typedef的作用是为一种数据结构体定义一个新名字. 在c语言中使用typedef帮助定义结构体,对于声明结构体变量,便可以直接使用typedef xxx(结构体名 对象名)的形式,而没必要带上struct关键词.实际项目C代码中,结...

馆陶县17866417630: C语言中结构体类型名与变量名区别? -
吴子醋酸: 结构体名字是类型名,变量名是实体名,一个类型可以有许多实体. 具体操作,举例讲解如下: 1.结构体类型定义 定义方式1: Typedef struct LNode {int data; // 数据域struct LNode *next; // 指针域 } *LinkList;定义方式2: struct LNode {int ...

馆陶县17866417630: 结构体是c语言中的一个数据类型吗 -
吴子醋酸: 结构体是自定义的数据类型,不属于C语言内嵌的类型 他只是提供给用户一种自己定义自己需要的数据类型的可能

馆陶县17866417630: c语言如何动态的定义结构体? -
吴子醋酸: 这是不可能的.C语言的结构体是一种类型,在使用之前一定要定义或一个“假”声明.你的需求不合理.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网