美文网首页
C语言-结构体

C语言-结构体

作者: 一叶之界 | 来源:发表于2016-12-23 17:17 被阅读0次

在现实生活中,一组数据往往具有很多种类型的数据。例如,学生登记表,它里面包含了姓名、学号、成绩、班级等等,而这些元素的数据类型分别为字符、整型、浮点型等等。显而易见,这些数据是不能放在同一个数组当中的,因为数组中的各元素必须是同种类型的数据,且长度保持一致。因此,为了解决这一问题,C语言中给出了另一种构造数据类型——“structure(结构)”,又称之为结构体。它相当于一种高级的数据构造类型,它可以是有两个或两个以上成员组成。

1. 一般形式:

struct 结构体名
{
    成员列表;
};

2. 结构体类型变量的定义

结构体类型变量的定义有三种形式:

1.先定义结构,后定义变量:

struct stu
{
    char name[20];
    char sex;
    float score;
};
struct stu boy,girl;

2.用宏定义结构类型:

#define STU struct stu
struct stu
{
    char name[20];
    char sex;
    float score;
};
struct stu boy,girl;

3.在定义结构类型的同时说明变量:

struct stu
{
    char name[20];
    char sex;
    float score;
}boy,girl;

3. 结构变量的表示方法

一般形式:

结构变量名.成员名
boy.name  // 男孩的名字
girl.score  // 女孩的成绩

若成员本身也是一个结构体,则必须找到最低级的数据类型才可以,例如:girl.brithday.month。

4. 结构体变量的赋值

结构体变量的赋值就是给其成员赋值。可用输入语句或者赋值语句来完成对结构体变量的赋值。

// 案例1:
#include <stdio.h>
#include <string.h>
int main()
{
    struct person  
    {
      char name[10];
      char sex;
      int height;
    };
    p.height=120;
    p.sex='m';
    strcpy(p.name,"xxx");
    printf ("{%s-%c-%d}\n",p.name,p.sex,p.height); // 先定义,后赋值
    struct person p1={"kkk",'f',150};
    printf ("{%s-%c-%d}\n",p1.name,p1.sex,p1.height); // 第二种赋值方法
    struct person p2=p1;  // 将p1里面的值赋值给p2
    printf ("{%s-%c-%d}\n",p2.name,p2.sex,p2.height); // 第三种赋值方法
    return 0;
}

5. 结构数组的定义

数组的元素可以为int、float等等,同样元素也可以是结构体类型的,故有结构体数组。

struct stu
{
    char name[20];
    char sex;
    float score;
}boy[5];
boy[5]={
    {"ch","man",60};
    {"er","women",80};
    {"hh","man",90};
    {"jj","man",100};
    {"oo","women",59};
}

注释:定义stu类型数组boy[5],共有5个元素,从boy[0]~boy[4]。且每组数据都是stu类型的,且可以对该数组进行初始化。

6. 指向结构变量的指针

定义结构指针的一般形式:
struct 结构名 *结构指针变量

例如:struct stu *pstudent;
// *pstudent 是结构类型stu的指针;

访问的一般形式:

(*结构指针变量).成员名
或者为
结构指针变量->成员名
(*pstudent).name
or:
pstudent->name
// 注意:(*pstudent)两边的括号不能少,因为成员符号“.”的优先级高于“*”。

7. 结构类型定义符typedef

typedef用于给数据类型取“别名”。

int a,b;
// 也可以写为如下形式:
typedef int INTEGER
INTEGER a,b;

若用typedef 定义数组、指针、结构类型将会很方便,不仅使程序书写简单,且使意义更加明确,同时也增强了可读性。
一般形式:
typedef 原类型名 新类型名;

8.计算结构体长度规则

内存字节对齐原则(求字节数):

  1. 如果结构体里面所有的成员变量(成员属性)都是基本数据类型(int、char、float、double),那么第一个成员变量从内存地址偏移量为零开始计数,后面的成员变量从内存地址偏移量是本身所占字节大小的最小倍数开始分配。
  2. 如果结构体里面的成员变量不是基本数据类型,比如:int arr[10];那么,这个数组成员变量从内存地址偏移量是这个数组本身里面的元素的最大字节数的倍数开始分配。
  3. 最后收尾的时候,所占字节数要是最大成员变量的最小倍数

相关文章

  • C语言和OC的结构体(struct)

    Struct(结构体) 1.结构体定义 2.结构体变量 3.结构体数组 4.C语言结构体指针 5.C语言共用体 6...

  • C语言结构体用法很多,坑也很多

    C语言可谓是编程界的传奇语言,历经几 十 年,依然排名前列。 本文主要说的是C语言中的结构体,结构体是C语言中重要...

  • C语言结构体

    结构体 本文介绍C语言结构体,struct 在C++中功能相对C较多,相当于类,这里暂时不讨论,本文单独讨论C语言...

  • 嵌入式学习笔记19.11.25

    c语言结构体 结构体一般定义全局变量 struct stu{//struct 定义结构体 stu 结构体名称 in...

  • 12-Go语言结构体

    结构体 结构体的基本概念 什么是结构体Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再...

  • C语言学习笔记-结构体占用内存大小的计算

    引言 结构体在C语言中虽然经常使用,但是怎么计算一个结构体占用多大的内存,很多C语言的新手都没注意过,其实C语言的...

  • 结构体与指针

    1.1 Linux C语言结构体 简介:本课程深入的讲解了C语言中,预处理是怎么回事,结构体和公用体又是如何使用及...

  • c语言中的结构体

    结构体是 C 语言主要的自定义类型方案,这篇就来认识一下结构体。 一、结构体的形态 C源程序(struct.c):...

  • 闲聊C语言结构体

    结构体是 C 语言主要的自定义类型方案,这篇就来认识一下结构体。 一、结构体的形态 C源程序(struct.c):...

  • 深入理解Runtime中的isa

    objc_object Objective-C 所有对象都是 C 语言结构体objc_object,这个结构体中包...

网友评论

      本文标题:C语言-结构体

      本文链接:https://www.haomeiwen.com/subject/duykvttx.html