我是靠谱客的博主 称心溪流,最近开发中收集的这篇文章主要介绍结构体运用基础,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一   要学习结构体,第一步,我们要知道什么是结构体。

首先,结构体是一种聚合数据类型,就像数组一样,它可以存放多个元素。而不同的是,数组只能存放相同类型的元素,而结构体可以存放不同类型的元素。struct tag {  number-list  } variable-list;

例如,学生信息系统中,每一个学生包括了姓名,性别,学号,年龄等等的信息,

这个时候,我们就可以用一个结构体,来定义一个学生,包括这些所有的元素。

struct Student

{

    char *name ;

    char *sex;

    int number ;

    int age;

}student;

二  定义结构体

这就是我们定义的一个结构体了。在这里,我们最结构体的最后的student,是这个结构体的一个变量,当我们在

下面要用到这个结构体时,我们可以直接使用这个变量。例如     student.name = "小明";我们用student这个变量来直接访问我们

定义的这个结构体,通过使用点运算符(.)来实现对结构体内的元素  name 的赋值;

对于定义,结构体可以有省略,以上面的为例,我们也可以写成

就可以用一个结构体,来定义一个学生,包括这些所有的元素。

struct 

{

    char *name ;

    char *sex;

    int number ;

    int age;

}student[2];

这边省略了标签(tag)部分,这样做就只能使用定义时的这个变量了,无法自己再去定义变量。

而如果省略最后的变量部分,当我们要使用时,就可以自己定义一个变量 struct Student student ,

然后再去使用,比如student.name = "小明";

再看这里定义的变量,   student[2]    ,没错,这是一个数组, 使用时,student[0]   和  student[1]   都可以写入结构体内容。

如  :student[1] = {“小明”,“男”,1,15};

在定义结构体时,我们还有更简便的方法,这里需要用到  typedef。

typedef struct Student

{

    char *name ;

    char *sex;

    int number ;

    int age;

}student;

还是上面的那个结构体,我们用typedef来定义,不同在于,最后的student在这里是类型名,就是类似于 int  的感觉。

三   结构体的访问    关于运算符 “ ->”

我们在使用结构体是,经常会用到 指向符(->),这个运算符作用和点运算符  (.)作用一样,不同在于—>用于指针的传递,

比如我们定义一个指针 student *sb,当我们使用它时,就应该使用->,sb -> name ="小明"。

四  结构体的大小

struct A
{
    char a;
    int b;
};

问 :对于上面这个结构体,它在内存上大小为多少?

也许你会觉得这很简单,char占1个字节,int占4个字节,答案就是5了。

但是,真的是这样吗??

完全不对,正确答案应该是8。

那么为什么呢?原因就在于结构体存储时需要内存对齐。上面的char类型实际占了4个字节。因为  int 类型占4个字节,这就要求int类型从4的倍数格开始存储,第一格放了一个char类型,系统又分配了3个空格,来使int类型对齐。

再举一个例子

struct B
{
    char a;//1+1
    short sh;//2
    int b;//4 
};

这里答案是8,short占2个字节,所以在char类型后需要加一个空格来对齐。

下一个例子

struct C
{
    int a;//4
    char b;//1+3
};

答案是8.这里要向后对齐。

来一个复杂一点的:

struct D
{
    char a;//1+3
    struct E
    {
        char b;//1+3
        float c;//4
    }e;
};

答案是12,虽然嵌套了结构体,但对齐方法不变,区别在于先对齐嵌套的结构体。

比如这边,我们先对齐的时嵌套的结构体E,然后再对齐外面的char a。

最后

以上就是称心溪流为你收集整理的结构体运用基础的全部内容,希望文章能够帮你解决结构体运用基础所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部