结构体的使用方法 C++结构体和类的区别

以前有一种怀疑。为什么有些结构的指针需要分配空?有些房间不需要分配空?现在总结一下想法:1.关于结构的定义:使用结构时通常会用到变量或指针。typedef struct{int a;int b;}data;使用这种结构有两种方式:data datas 直接引用。这样使用类似于int a 这种模式。data类似于一...

以前有一种怀疑。为什么有些结构的指针需要分配空?有些房间不需要分配空?现在总结一下想法:

1.关于结构的定义:使用结构时通常会用到变量或指针。

typedef struct{int a;int b;}data;

使用这种结构有两种方式:

data datas 直接引用。这样使用类似于int a 这种模式。data类似于一个类型(如:int)这样的话,在使用的时候,系统自动会为这个类型分配空间。在栈上进行分配,在使用完成后会自动释放。data *dates 指针调用。定义一个data类型的指针。使用这种指针需要做的是分配空间和释放空间以及初始化。人为的进行分配和释放,这部分空间一般会位于堆的位置。你也可以让指针直接指向已经存在的空间。

二:关于传递和调用结构指针的用法:

typedef struct{ int a; int b; }date; static int intcms(void *para){ int c = ((date *)para)->a; printf("c is %d\n",c); } int ***in(int argc, char **argv) { date dates; dates.a = 9; dates.b = 2; intcms(&dates);}

上面调用中使用的结构变量。传入函数时通过指针void *para传递。注意para->不能直接使用。用于访问结构成员的。为什么?这是因为para只是接收到的地址。尽管para指向该结构的第一个地址。但是这个指针不知道指向什么,也不知道有多少成员。您需要(date *)para来强制转换。这样帕拉就能知道自己是什么样的指针了。有多少成员?

typedef struct{ int a; int b; }date; static int intcms(void *para){ int c = ((date *)para)->a; printf("c is %d\n",c); } int ***in(int argc, char **argv) { date *dates = (date *)***lloc(sizeof(date)); dates->a = 9; dates-> = 2; intcms(dates); free(dates);}

上面的代码使用结构指针分配空和释放空。就是这一堆的用处。如果你不释放它。在整个过程的最后。系统会自动回收。简单的程序没有错。但当需要分配大量空时,可能会导致资源浪费或内存耗尽。

三:结构定义的几种方法

#include <stdio.h>#include <string.h>#include <***lloc.h>/*先定义几类结构体*/struct str{ int a; int b;}str1;/*这是第一类结构体的形式,有结构体名,有结构体变量*/struct str2{ int a; int b;};/* 这是第二类结构体的形式,有结构体名,无结构体变量 */typedef struct { int a; int b;}STR3;/* 这是第三类结构体的形式,把结构体重定义为STR3 */typedef struct str4{ int a; int b;}STR4;/*这是第四类结构体的形式,把结构体重定义为STR4,还有结构体名称*/void ***in(){ /*定义各类的指针*/ struct str *p; struct str2 *p2; STR3 *p3; struct str4 *p4; STR4 *p5; /*-----------------------------------------------*/ p = &str1; /*结构体指针指向结构体变量的地址首地址*/ p->a=1; p->b=2; printf("p->a=%d,p->b=%d\n",p->a,p->b); /*-----------------------------------------------*/ p2 = (struct str2 *)***lloc(sizeof(struct str2)); /*为结构体指针分配对应结构体类型的大小的首地址*/ p2->a=1; p2->b=2; printf("p2->a=%d,p2->b=%d\n",p2->a,p2->b); /*-----------------------------------------------*/ p3 = (STR3 *)***lloc(sizeof(STR3)); /*为结构体指针分配对应结构体类型的大小的首地址*/ p3->a=1; p3->b=2; printf("p3->a=%d,p3->b=%d\n",p3->a,p3->b); /*-----------------------------------------------*/ p4 = (struct str4 *)***lloc(sizeof(struct str4));/*为结构体指针分配对应结构体类型的大小的首地址*/ p4->a=1; p4->b=2; printf("p4->a=%d,p4->b=%d\n",p4->a,p4->b); struct str4 str4a; p4 = &str4a;/*结构体指针指向结构体变量的地址的首地址*/ p4->a=1; p4->b=2; printf("p4->a=%d,p4->b=%d\n",p4->a,p4->b); /*--------------------------------------------------*/ /*-----------------------------------------------*/ p5 = (STR4 *)***lloc(sizeof(STR4));/*为结构体指针分配对应结构体类型的大小的首地址*/ p5->a=1; p5->b=2; printf("p5->a=%d,p5->b=%d\n",p5->a,p5->b); p5 = &str4a;/*结构体指针指向结构体变量的地址的首地址*/ p5->a=1; p5->b=2; printf("p5->a=%d,p5->b=%d\n",p5->a,p5->b); /*--------------------------------------------------*/}

运行结果如下:

本文来自果味果冻投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/602330.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 06-22
下一篇 06-22

相关推荐

  • python程序结构特点

    品牌型号:联想小新Pro13/系统版本:windows10 python程序结构特点为:简单易学、面向对象、可移植性、解释性、免费开源、可扩展性、丰富的库、规范代码、开发效率高、可嵌入性、高级动态编程。1、简单易学:Python是一种代表简单主义思想的语言,遵循"简单、优雅、明确

    2023-07-28 06:37:01
    724 0
  • 电脑主机内部结构图解(计算机主机内部结构连接)

    很多人都在感叹电脑的神奇,却不知道机箱里面是什么。给大家介绍一下吧。操作01主板的功能就像一张桌子,各种各样的东西都可以放在上面。主板上有连接线和卡槽,不同类型的主板需要不同的配件。02 02电源每台电脑都必须有电源,电源有额定功率。购买电源时检查电脑的功率;03

    2023-07-26 04:48:01
    269 0
  • 牧场之国按照什么结构

    【牧场之国按照什么结构 】 《牧场之国》课文是按照总分的结构来写的。全文紧紧围绕荷兰牧场白日的辽阔无际、宁静和谐和夜晚的祥和寂静来写,展现 了荷兰蓝天、白云、牛羊成群的优美迷人、自然和谐的景观。《牧场之国》分段段意:第一段:这是一个总起句,句子紧扣课题,开门见

    2023-07-24 02:51:01
    594 0
  • 字是什么结构的字

    1左右结构如挣伟休妲 2上下结构如志苗字胃 3左中右结构如湖,脚,溅,谢 4上中下结构如奚髻禀亵 5半包围结构1右上包围结构如句可司。根据汉字中部件与部件之间的方位关系,汉字的结构可分为14种1左右结构 如挣伟休妲 2上下结构 如志苗字胃 3左中右结构 如彬湖棚椭 4上中下结构

    2023-07-22 10:34:01
    271 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信