精华内容
下载资源
问答
  • 结构体变量是指将不同的数据类型整合成一个有机的整体,以便于调用。 struct Student { int num; char name[20]; int score; } Student stud1;//stud1就是结构体变量 结构体指针变量是指指向结构体变量的指针...

    目录

    概念

    内存分配

    对象的引用

    结构体变量和结构体指针变量作形参的区别

    以结构体变量和结构体指针变量形参的函数调用


     

    概念

    结构体变量是指将不同的数据类型整合成一个有机的整体,以便于调用。

    struct Student
    {
        int num;
        char name[20];
        int score;
    }
    
    Student stud1;//stud1就是结构体变量

    结构体指针变量是指指向结构体变量的指针或者指向结构体数组的指针。

    Student *stud2;//结构体指针变量

    内存分配

    在C语言中都是使用库函数malloc和free来分配和撤销内存空间的。C++中提供了较简便而功能较强的运算符new和delete来取代函数malloc和free函数。注意:new和delete是运算符,不是函数。

    int main
    {
        Student *p
        p = new Student    //用new运算符开辟一个存放Student型数据的空间
        .
        .
        .
        delete p;         //使用完之后一定要撤销该空间
        
        return 0;
        
    }

    对象的引用

    结构体变量引用成员变量的方式是:

    结构体变量名.成员变量名

    指针引用结构体变量成员的方式是:

    (*指针变量名).成员变量名 //*指针变量名 两边的括号不可以省略
    
    指针变量名->成员名    //->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。

    结构体变量和结构体指针变量作形参的区别

    结构体变量作为函数形参。此时sc_para和tm_para传递的是两个结构体变量,包含其内部所有的成员变量,占用的内存空间自然而然就大,具体大小取决于结构体变量的大小。

    int REF_STRUCT_PARAM(
                SC_PARAMS sc_para,
                TM_PARAMS tm_para
                )    //SC_PARAMS和TM_PARAMS是两个结构体类型

    结构体指针变量作为函数形参。此时*sc_para和*tm_para传递的是两个指针变量,一个指针只占用四个字节空间,而且存储的是结构体变量的首地址。修改为指针后速度变快,占的内存空间也减小。

    int REF_POINTER_PARAM(
                SC_PARAMS* sc_para,
                TM_PARAMS* tm_para
                )    //SC_PARAMS和TM_PARAMS是两个结构体类型

    以结构体变量和结构体指针变量形参的函数调用

    以结构体变量作形参的函数的调用,函数形参部分直接调用定义的结构体名即可。

    int main
    {
    
        SC_PARAMS sc_para;
        TM_PARAMS tm_para;
    
    
        int REF_STRUCT_PARAM(sc_para, tm_para);  //SC_PARAMS和TM_PARAMS是两个结构体类型
    
        return 0;
    }

    以结构体指针变量作形参的函数的调用,函数形参位置要引用结构体地址。

    
    int main
    {
    
        SC_PARAMS* sc_para;
        TM_PARAMS* tm_para;
    
    
        int REF_POINTER_PARAM(&sc_para, &tm_para);  //SC_PARAMS和TM_PARAMS是两个结构体类型
    
        return 0;
    }

     

     

     

     

     

    展开全文
  • 2、结构体的目的是为了描述一个对象,为了把一个对象描述清除必须要所出这个对象的很多属性,而为了表示这些属性就要用到不同的变量,而且变量不止一个。 二、如何来定义结构体: 1、定义结构体 格式: struct 结构体...

    结构体

    一、什么是结构体:

    1、不同类型的变量集合被称为结构体
    2、结构体的目的是为了描述一个对象,为了把一个对象描述清除必须要所出这个对象的很多属性,而为了表示这些属性就要用到不同的变量,而且变量不止一个。

    二、如何来定义结构体:

    1、定义结构体
    格式:

    struct 结构体{
    	属性列表 
    };
    

    比如:定义一个结果体,目的是为了描述一个工人

    struct worker {
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;	
    }
    

    2、如何来定义结构体变量

    1)上方那样定义的只是结构体的类型,并不是变量

    比如:

    int a;//其中int 是类型  而a是变量
    

    2)在C程序里面有几种类型是C已经为我们做好的,我们只要拿来使用就行了,但是结构体类型在C程序里面没有,就需要用户自己来定义。

    3)下方程序当中struct worker是定义的类型

    struct worker {
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;	
    }
    

    在这里插入图片描述

    4)定义结构体变量有三种方式
    (a)在定义类型的时候就定义结构体变量,这样的变量就相当于全局变量。
    (b)在定义结构体类型之后,再定义结构体变量。
    (c)可以在定义结构体类型 的时候,省略结构体类型名 (一般不用)

     struct {//定义结构体类型 
    	char id[10];//定义工号
    	char name[10];//定义姓名
    	char sex[10];//定义性别
    	int pay;//定义基本工资
    },wi,w2;//此处的分号不能少
    

    (d)可以通过typedfed这个关键字,为结构体变量取别名别名一般用大写

    在这里插入图片描述

    三、如何给结构体变量赋初值

    在这里插入图片描述

    四、如何来输出结构体变量的值

    1、由于结构体变量里面会包含有很多的属性,所以在输出时,一定要分别输出,不能整体输出
    2、结构体变量名.成员

    #include<stdio.h> 
    typedef struct worker{//定义结构体类型 
    	char id[10];//定义工号
    	char name[10];//定义姓名
    	char sex[10];//定义性别
    	int pay;//定义基本工资
    }WOR;//此处的分号不能少
    void main(){
    	WOR w1={"0001","狄文杰","男",1200},w2={"0002","张三丰","女",500},w3;//w1和w2它们的属性相同但是属性值不相同。 
    	printf("%s,%s,%s,%d",w1.id,w1.name,w1.sex,w1.pay);//只能够分别输出不能够整体输出 
    } 
    

    在这里插入图片描述
    以下赋值方式也是可以的

    
    //一个一个的将w1的值赋值给w3 
    	w3.id=w1.id;
    	w3.name=w1.name;
    	w3.pay=w1.pay;
    	w3.sex=w1.sex;
    

    3、结构体变量虽然不能整体输出,但是可以整体赋值
    在这里插入图片描述

    
    
    展开全文
  • 原文链接:... 一个结构体变量占多大内存空间的问题   直接来看相同数据结构体的几种书写的格式吧。 格式一: 1. struct tagPhone  2. {  3. char A;  4. int B;  5. ...

    原文链接:http://blog.sina.com.cn/s/blog_75a2ecd20102xca0.html

    一个结构体变量占多大内存空间的问题

     

    直接来看相同数据结构体的几种书写的格式吧。

    格式一:

    1.  struct tagPhone    

    2.  {    

    3.       char   A;    

    4.       int    B;    

    5.       short  C;    

    6.  }Phone1;  

    格式二:  

    1.  struct tagPhone    

    2.  {    

    3.       char   A;    

    4.       short  C;    

    5.       int    B;    

    6.  }Phone2;   

    格式三:  

    1.  struct tagPhone3    

    2.  {    

    3.       char    A;    

    4.       char   B[2];    

    5.       char    C[4];    

    6.  }Phone3;   

    格式四:

    1.  struct tagPhone3    

    2.  {    

    3.       char    A;    

    4.       double  B[2];    

    5.       char    C[4];    

    6.  }Phone4;   

    例题:请问下面定义的结构体变量aa在计算机内存中占用多少字节?

    #include

    main()

    {

    struct  student

    {   float    height;

    short int  age ;

    char     sex ;

    }aa;

    printf("%d\n",sizeof(aa));  //屏幕上将显示多少?

    }

    错误解答:我们都知道,char类型占用1个字节,float型占用4个字节,short int类型占用2个字节,int型在VC6.0中占用4个字节(TC2.0中占用2个字节),long占用8个字节,double占用8个字节。因此,我们可能会犯一个错误就是直接4+2+1=7,结构体aa占用7个字节。这是错的。

    错误分析:计算结构体大小时需要考虑其内存布局,编译系统为了提高计算机访问数据的效率,在安排结构体每个成员的时候采用了内存对齐的方法,具体是:结构体在内存中的存放按单元进行存放,每个单元的大小取决于结构体中最大基本类型的大小

    对格式一:

    图1

    ​​​​因为所有成员中B成员类型最大(int型占用4个字节),故结构体Phone1在内存分布时以4字节为一个单元来存储每个成员。又因为A占用一个字节后,只剩下3字节了,放不下后面紧挨的成员B了,所以必须开辟一个新的单元来存放B,B刚好占满一个单元,接下来的成员C又必须再开辟一个新的单元来存放。这样,Phone1占用的字节数就是:3*4=12;

    同理对于格式二,

    图2

    A后面还有三个字节,足够存放C,所以C就放在了A的后面,然后只剩下一个字节了,不够存放后面的B,于是又开辟一个新单元存放B。这样,Phone2占用的内存字节就为2*4=8。

    对于格式三: 

     图3

    ​上面结构体中,最大数据类型是char,占一个字节,因此它的一个存储单元就是1个字节。sizeof(Phone3) =1 + 2 + 4 = 7, 其大小正好是结构体中各成员所占内存空间之和,这种情况也是最节省存储空间的。

    对于格式四:

    图4

    ​Phone4中最大的数据类型是double,占8个字节,因此它的一个存储单元就是8个字节。由上图可知sizeof(Phone4)=4*8=32。

    综上所述,格式一和格式四是非常浪费存储空间的,应该尽力避免;格式三对存储空间的利用率是最高的;格式二存储空间的利用率居中。作为一个优秀的程序员,应该深入掌握这些写法的差异性,以便视情况选用不同的写法。

    展开全文
  • C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的。 问题2:给结构体变量分配之后,是否还要给每个成员分配,...

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?


    问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的。


    问题2:给结构体变量分配之后,是否还要给每个成员分配,还是只给不能确定大小的成员分配?


    问题3:如果是要每个成员分配内存,那么释放的时候是不是每个成员都要单独释放?指针加一之后,又怎么做?



    C\C++中结构体变量与结构体指针内存分配问题?


    (1)声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。


    (2)结构体变量分配结构体本身大小的空间,结构体指针分配4个字节,其实任何类型的指针都是分配四个字节的指针空间。


    (3)所以:
         A a[3]; //a里面是三个A变量,所以分配三个结构体大小
         A *a;  //a是一个指针,分配4个字节,就算A再大,a也只是4个字节,因为任何类型的指针都是4个字节。要使用a,必须先要对指针初始化,也即分配空间了。
         如:
         A *a;
         a = (A*)malloc(sizeof(A));


    (4)我们完全可以撇开结构体,把问题简单化成int类型来说明这个指针问题:
    int a1[10];
    int *a2;


    1)a1是包含10个int的数组,大小也就是10*sizeof(int)。直接使用a1不要在进行什么初始化或者分配空间的游戏,因为数组a1里面本身存放的就是int变量本身了。


    2)a2是一个int*的东西,也就是整型指针,a2不能存放int变量,它只能存放一个int变量的地址。如果要使用a2,必须首先对a2初始化,即将它指向一个int变量的地址,如:a2 = (int*)malloc(sizeof(int));
    或者
    int i = 10;
    a2 = &i;
    所以,malloc函数的作用是首先声明一个变量,然后返回该变量的地址。
    所以:a2 = (int*)malloc(sizeof(int)) 的含义就是把该变量的地址赋值给a2,和a = &i 本质上并没有什么不同,只是一个变量是栈上,一个是堆上,都是一个地址赋值。


    (5)所以,所谓的分配空间,就是对指针赋值,把一个变量的地址赋值给一个指针。

    展开全文
  • 代码如下 # include "stdafx.h" # include ..."结构体变量" ...//结构体变量 ...结构体指针变量与结构体大小不同,下图中,填入sendto函数最后一个参数应该是结构体变量SOCKADDR,而非结构体指针
  • 结构体变量分配结构体本身大小的空间,结构体指针分配4个字节,其实任何类型的指针都是分配四个字节的指针空间。 所以: A a[3]; //a里面是三个A变量,所以分配三个结构体大小 A *a; //a是一个指针,分配4个字节,...
  • 一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。 声明一个...
  • 结构体变量内存分配问题

    千次阅读 2019-03-09 08:44:44
    2.结构体变量内存的总大小必须为sizeof(结构体成员变量)(最大的)的整数倍。 struct Demo{ char a;//sizeof(char)=1 int b;//sizeof(int)=4 flloat c;//sizeof(float)=4 double d;//sizeof...
  • 结构体与结构体变量

    千次阅读 2017-01-23 01:04:58
    1、访问结构体变量的两种方式:见例种:stu.id = 1001; 第二种:pst->id = 99; 第二种用的的证明如下: struct Student *pst; pst = &stu; //pst指向了stu,所以*pst等价于stu pst->id = 99;...
  •  很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体 类型的变量(定义的话会让人难以理解, 又没有实际的作用, 干嘛要定义?).  考虑可以用指针来反求, 比如有一个 POINT ...
  • 如何判断一个结构体大小

    千次阅读 2015-08-23 10:59:02
    下面说一下如何判断一个结构体大小。 首先需要了解总线宽度和自然边界这俩个概念,编译器在分配结构体时根据这俩个因素来计算偏移量和空间占用。 总线宽度: 总线宽度就是一个处理器访问周期最多可以访问多少位...
  • 结构体是一种构造数据类型,可以把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。使用结构体时,首先需要对结构体类型进行定义,结构体类型的定义如下所示: struct 结构体类型名称 { 数据...
  • 结构体变量占内存空间大小

    千次阅读 2016-03-21 17:28:08
  • 设计一个函数,能够对输入的两个学生结构体信息中的成绩按照大小顺序输出。要求使用指针类型的变量进行结构体变量的定义。 解题思路:采用 malloc 函数进行结构体指针变量的定义,并使用 --> 访问成员变量的方式...
  • 有时候我们想知道一个结构体变量大小,如果是用sizeof操作只能在运行时才能知道结果。预处理是不计算sizeof大小的,因此使用预处理的方法行不通。 GCC编译器的一个告警给我们提供了方法: -Wlarger-than=len ...
  • c语言结构体变量和结构体指针

    千次阅读 2013-05-10 16:11:01
    c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node))和Node p二者的区别 Node *p是定义一个Node结构体指针,指针名为p,指向一个Node结构体,并为这个...
  • 声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。 A a[3]; a是A型的,有3个,当然分配A乘3大小的空间 A* a; a是A*型的,当然只分配A*大小的空间,而...
  • 结构体变量之间的比较和赋值原理

    千次阅读 2014-08-12 22:39:33
    结构体变量之间的比较方法和赋值原理:结构体变量之间可以直接赋值我想大家都知道了。但结构体变量之间可以做比较吗?...如果是一个结构体中包含多个结构体(而结构体中又包含了结构体,比如ovs中的
  • 结构体变量和结构体类型的定义

    万次阅读 多人点赞 2019-08-02 16:43:19
    结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *LinkList; 定义方式2: struct LNode { int data; // 数据域 struct LNode *next; // 指针域 }; ...
  • 【C语言】结构体变量的初始化方法

    千次阅读 2019-07-07 17:08:03
    结构体变量的初始化方法 1.定义结构体变量并同时对其初始化 这里介绍三种方法: 顺序法 乱序法 C++风格的乱序 struct student { int score; const char *name; } 1.1 顺序法 按照结构体成员的声明顺序进行初始...
  • 您可能已经在蓝图中用到了简单结构体,因为矢量、旋转体和变形均为结构体变量。例如矢量结构体保存彼此关联的 X 浮点、Y 浮点和 Z 浮点变量。 结构体也可保存其数据。变形结构体保存 Actor 的位置(矢量结构体)...
  • 本文参考: ... 在做一道题是发现结构体的长度并不简单的等于各成员长度之和。受限于硬件平台,为了使不同平台下都能正确读取... 1、结构体变量的首地址能被其最宽基本类型成员大小所整除; 2、结构体成员相对于结构体
  • 一、首先我们来了解关于结构体以及结构体数组的概念。...型(类似于我们熟知的int型,String型等),里面有一个char类型,两个int类型。 如何给这个结构体赋值以及访问里面的属性? struct weapon...
  • 我们知道,struct结构体中可以有不同的数据类型变量,成员定义时依次存储在内存连续的空间,struct结构体变量的首地址就是第一个成员的地址,那么内存偏移量就是各个成员相对于结构体变量地址的...
  • Node *p是定义一个Node结构体指针,指针名为p,指向一个Node结构体,并为这个结构体分配了内存空间 该结构体无命名 Node p是定义一个Node结构体结构体名为p。 追问:那两个的用法有什么区别???在...
  • 结构体作为函数的参数 结构体作为函数的参数分为两种:结构体结构体数组。...如:声明一个老师类型的结构体,并定义和初始化 声明老师结构体类型,并用typedef重命名 struct teacher{  char name[20];  
  • #include <stdio.h> #include <string.h> struct Student { int stuID; char name[10]; int achievement; }stu1; int main() ... printf("%d %s %d",stu1.stuID,stu1.name,stu1.achie

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,889
精华内容 45,955
关键字:

一个结构体变量的大小