C语言:结构体简单语法总结

本文介绍了C语言中结构体的概念,包括如何声明和定义结构体变量,结构体的初始化方法,以及如何通过结构体传递信息给函数。还讨论了结构体与指针的区别,以及使用复合字面量创建临时结构值。此外,提到了结构体在文件存储中的应用,如使用fprintf和fwrite函数。
摘要由CSDN通过智能技术生成
我们在编程中要表达的信息通常不只是一个数字或者是一个字符。程序可能处理具有多种属性的实体。例如通过姓名、地址、电话号码、和其他信息表示一名客户。C结构可以把这些信息放在一个单元内。这便是结构体。
  • 建立结构声明

    结构声明描述了一个结构的组织布局。声明类似下面这样:

    struct book{
        char title[20];
        char author[20];
        float value;
    }dick;
    

    这样,该函数便创建了一个结构变量dick,该变量的结构布局是book.值得一提的是,结构的标记名是可选的。

  • 定义结构变量

    struct book library;
    

    编译器执行这行代码便创建了一个结构变量library.编译器使用book模板为该变量分配空间;

    在结构变量的声明中,struct book 所起的作用相当于一般声明中的int或者float.

    结构体变量的定义有俩种形式:

    形式1.

    struct book{
        char title[20];
        char author[20];
        float value;
    }dick;
    

    形式2.

    struct book dick;
    
  • 初始化结构

    结构变量同样也可以进行初始化:如下图所示

    struct book library = {
        "the is a book",
        "money need 20",
        1.95
    };
    
  • 结构的初始化器

    C99和C11为结构提供了指定初始化器,可以指定选择初始化结构成员中的某一项。

    struct book surper = {.value=10.99};
    

    可以按照任意顺序使用指定初始化器

    struct book gift = {
        .value = 10.99,
        .aulouth = "GXW",
        .riri = "ko"
    }
    
  • 声明和初始化结构指针

    struct guy * him;
    

    和数组不同的是,结构变量名并不是结构变量的地址,因此要在结构变量名的前面加上一个&运算符。

    him = &barny
    

    顺带一提,在有些系统中,一个结构的大小可能大于他各成员的大小之和。这是因为系统对数据进行校准的过程产生了一些缝隙。例如,有些系统必须把每个成员放在偶数地址上,或4的倍数的地址上。在这种系统中,结构的内部就存在没使用的缝隙。

  • 向函数参数传递结构的信息:(以下三种)

struct book{
	char name[20];
	char author[20];
}BOOK;
1.传递结构成员

​	将结构的成员作为参数,直接传递给函数;

	void MAX(BOOK.name);

2.传递结构的地址

​	将结构的地址作为参数,直接传递给函数;

	void MAX(&BOOK);

3.传递结构

​	将结构作为参数,直接传递给函数

	void MAX(BOOK);
  • 其他结构特性

    1.结构可以整体赋值

    o_data=n_data;
    

    2.初始化相同的结构

    struct names right = {"nihao",12};
    struct names capit = right;//把一个结构初始化为另一个结构
    
  • 结构和指针的区别

    指针作为参数的优点:执行快,只需要传递给一个地址

    指针的缺点:无法保护数据,被调函数中的某些操作可能会意外的影响原来结构的操作。不过可以使用const

    结构作为参数的优点:函数处理的是原始数据的副本,这保护了原始数据。代码风格也更加的清楚。

    结构的缺点:传递结构浪费时间和存储空间尤其是把大型结构传递给函数,而只使用结构中的一俩个成员特别浪费。

  • 复合字面量和结构

    C99的复合字面量特性可用于结构和数组。如果只需要一个临时结构值。复合字面量很好用。例如:

    value=(struct book) {"the idiot","Fyodor Dostoyev",6.99};
    
    struct book{
        char MAX[20];
        char MIN[20];
        double a;
    };
    int main()
    {
        app=(struct book) {"the idiot","Fyodor Dostoyev",6.99};
        bpp=(struct book) {"idiot","Fyodor",8.65};
        printf("%f",app.a);
        printf("%f",bpp.a);
    }
    
  • 把结构的内容保存到文件中

    如何把结构的信息存储到文件中去呢?

    方法1;fprintf()函数

    缺点:不可以一次将一整块数据存储

    方法2:fwrite()函数和fread()函数

    fwrite(&prime,sizeof(struct book),1,pbook);

    定位到prime结构变量开始的位置,并把结构中的所有字节都拷贝到与pbook相关的文件中。sizeof(struct book)告诉函数待拷贝的一块数据的大小,1表明一次拷贝一块数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值