首页 » 资讯 » 生活常识 » 正文

结构体类区别(结构体和结构类型的区别)

放大字体  缩小字体 发布日期:2022-12-10  来源:互联网  作者:麻布岗信息网  浏览次数:437
导读

今天有麻布岗信息网小编为大家分享以下内容: 以前总有一种疑惑。为什么结构体的指针有的需要用分配空间?有的不需要分配空间呢?现在总结一下思路: 一:关于结构体的定义问题:使用结构体一般会使用变量或者定义指针 typedefstruct{inta;intb;}data; 使用这个结构体的两种方式: data datas 直接引用。这样使用类似于int a 这种模式。data类似于一个类型(如:int)这样的话,在使用的时候,系统自动会为这个类型分配空间。在栈上进行分配,在使用完成后会自动释放。

今天有麻布岗信息网小编为大家分享以下内容:

以前总有一种疑惑。为什么结构体的指针有的需要用分配空间?有的不需要分配空间呢?现在总结一下思路:

一:关于结构体的定义问题:使用结构体一般会使用变量或者定义指针 typedefstruct{inta;intb;}data;

使用这个结构体的两种方式:

data datas 直接引用。这样使用类似于int a 这种模式。data类似于一个类型(如:int)这样的话,在使用的时候,系统自动会为这个类型分配空间。在栈上进行分配,在使用完成后会自动释放。 data *dates 指针调用。定义一个data类型的指针。使用这种指针需要做的是分配空间和释放空间以及初始化。人为的进行分配和释放,这部分空间一般会位于堆的位置。你也可以让指针直接指向已经存在的空间。 二:关于结构体指针的传递和调用的用法: typedefstruct{inta;intb;}date;staticintintcms(void*para){intc=((date*)para)->a;printf("cis%dn",c);}intmain(intargc,char**argv){datedates;dates.a=9;dates.b=2;intcms(&dates);}

上述调用中采用的结构体变量。在传入函数时通过指针void *para指针传递过去。需要注意的是不能直接使用para->a来访问结构体的成员。为什么呢。这是因为para只是接收过来的地址。para虽然指向的结构体的首地址。但是这个指针并不知道自己指向的是什么内容和有多少成员。需要(date *)para强制转化一下。这样para就可以知道自己是什么类型的指针。有多少成员。

typedefstruct{inta;intb;}date;staticintintcms(void*para){intc=((date*)para)->a;printf("cis%dn",c);}intmain(intargc,char**argv){date*dates=(date*)malloc(sizeof(date));dates->a=9;dates->=2;intcms(dates);free(dates);}

上述代码使用结构体指针需要分配空间和释放空间。这是堆的使用。如果你不释放。在整个进程结束的时候。系统有会自动回收。简单的程序没什么问题。但是在需要分配大量的空间就可能导致出资源浪费或者内存耗尽的情况

三:结构体定义的几种方法 #include<stdio.h>#include<string.h>#include<malloc.h>structstr{inta;intb;}str1;structstr2{inta;intb;};typedefstruct{inta;intb;}STR3;typedefstructstr4{inta;intb;}STR4;voidmain(){structstr*p;structstr2*p2;STR3*p3;structstr4*p4;STR4*p5;p=&str1;p->a=1;p->b=2;printf("p->a=%d,p->b=%dn",p->a,p->b);p2=(structstr2*)malloc(sizeof(structstr2));p2->a=1;p2->b=2;printf("p2->a=%d,p2->b=%dn",p2->a,p2->b);p3=(STR3*)malloc(sizeof(STR3));p3->a=1;p3->b=2;printf("p3->a=%d,p3->b=%dn",p3->a,p3->b);p4=(structstr4*)malloc(sizeof(structstr4));p4->a=1;p4->b=2;printf("p4->a=%d,p4->b=%dn",p4->a,p4->b);structstr4str4a;p4=&str4a;p4->a=1;p4->b=2;printf("p4->a=%d,p4->b=%dn",p4->a,p4->b);p5=(STR4*)malloc(sizeof(STR4));p5->a=1;p5->b=2;printf("p5->a=%d,p5->b=%dn",p5->a,p5->b);p5=&str4a;p5->a=1;p5->b=2;printf("p5->a=%d,p5->b=%dn",p5->a,p5->b);}

运行结果如下:

麻布岗信息网(www.517338.com)综合在线信息,汇聚城市生活,美食,购物,旅游,房产,交通,家居,财经,教育,健康,娱乐,历史,汽车,生活消费门户网站

 
关键词: 结构 使用方法 区别
 
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:http://www.517338.com/news/show-179940.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。