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

C语言 - 结构体

作者: Jimmy_L_Wang | 来源:发表于2018-09-29 18:14 被阅读0次

结构体

struct student {
    char name[64];
    int height;
    float weight;
    long schols;  //奖学金
};

    //成员初始化
    struct student jimmy = {"Jimmy", 173, 86.2};

结构体对象O中的成员m可以通过O.m来访问。

声明结构体所赋的初始值的形式是,将各个结构体成员的初始值一次排列在{}里面,并用逗号分隔。未赋初始值的成员被初始化为0.

结构体成员和->运算符

void height_fix(struct student *std)
{
    if ((*std).height < 180) {
        (*std).height = 180;
    }
    if ((*std).weight > 80) {
        (*std).weight = 80;
    }
}

在指针变量前加上指针运算符*,就表示该指针指向的对象实体,即*stdjimmy的别名。所以,通过(*std).height(*std).weight等表示可以表示std指向的对象的别名。

->运算符(访问运算符 member-access operator)    a -> b      用指针访问结构体a中的成员b

所以以上函数可以用另一种形式:

void height_fix(struct student *std)
{
    if (std->height < 180) {
        std->height = 180;
    }
    if (std->weight > 80) {
        std->weight = 80;
    }
}

结构体和typedef

有效利用typedef声明,可以简化struct student这种冗长的写法。

typedef struct student {
    char name[64];
    int height;
    float weight;
    long schols;  //奖学金
} Student;

    //成员初始化
   Student jimmy = {"Jimmy", 173, 86.2};

上例中:结构体名是student, struct student是类型名。
在类型名struct student中,同义词Student被作为typedef名定义。因此,单独Student也可以作为类型名发挥作用。
如果类型名使用Student,不使用struct student,可以将struct student中的student省略掉。

typedef struct {
    char name[64];
    int height;
    float weight;
    long schols;  //奖学金
} Student;

聚合类型(aggregate type)

数组和结构体在处理多个对象的集合方面具有诸多相同点,他们统称为聚合类型

但数组与结构体也有不同点⚠️:

元素类型

数组用于高效地操作"相同类型"数据的集合。
结构体用于高效低操作“不同类型”数据的集合(也可以处理相同的)。

可否赋值

int a[6], b[6];
a = b; //❌

struct student x, y;
x = y //👌

数组元素个数相同,不能相互赋值。
结构体类型相同可以相互赋值。

结构体可作为函数的返回值

因为结构体可以进行赋值,所以可用作函数的返回值类型。

Student student_sth(int height, float weight, long schols)
{
    Student temp;
    strcpy(temp.name, "James");
    temp.height = height;
    temp.weight = weight;
    temp.schols = schols;
    
    return temp;
}

命名空间(name space)

  • 标签名(label name)
  • 小标签名(tag name)
  • 成员名
  • 一般性标识符
int main(void)
{
    struct x {  //小标签名
        int x;  //成员名
        int y;
    } x;//变量名
    
x://标签名
    x.x = 1;//变量名 . 成员名
    x.y = 5;//变量名 . 成员名
}

只要不属于同一个命名空间,即使在同一有效范围内使用相同的名字,也不会产生任何问题。

结构体数组

  Student stds[] = {
        {"Allen", 178, 61.2, 80000},
        {"Bob", 175, 62.5, 73000},
        {"Dave", 173, 86.2, 0},
        {"Mike", 165, 72.3, 70000},
        {"Nova", 179, 77.5, 70000},
    };

相关文章

  • 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/ububoftx.html