结构struct嵌套

结构还可以嵌套结构,但不能嵌套自身(嵌套自身的指针除外)


#include <stdio.h>
/*
时间:2022-05-11 19:08
作者:sgbl888
功能:结构嵌套
知识点:
    1、不能嵌套自身结构
    2、可以嵌套自身结构指针
    3、
*/
struct conact{
    char email[30]; //电子邮件
    unsigned long long int phone; //联系电话
};
struct Student{
    char name[20]; //姓名
    int num; //学号
    float score; //成绩
    struct conact c; //嵌套conact结构
    //struct Student s; //嵌套自身错误:error: field 's' has incomplete type
};
int main(){
    struct Student st = {
        .name = "李小花",
        .num = 1100123,
        .score = 78.5,
        .c.email = "lxh@126.com",
        .c.phone = 11001300123
    };
    st.c.phone = 13001300123; //嵌套访问

    printf("姓名:%s\t学号:%d\t成绩:%f\t邮箱:%s\t电话:%llu\n", st.name, st.num, st.score, st.c.email, st.c.phone);
    
    return 0;
}

运行结果:

姓名:李小花 学号:1100123 成绩:78.500000 邮箱:lxh@126.com 电话:13001300123

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用struct时,需要注意以下几点: 1. 定义在函数内部的结构体只在该函数内部有效,对外不可见。 2. 结构体内部的成员可以是任何数据类型,包括基本数据类型、结构体、指针等。 3. 结构体成员的访问方式有两种:使用“.”操作符或使用“->”操作符(当成员是指针类型时)。 4. 结构体可以进行初始化,可以使用“{}”进行初始化,也可以使用“=”进行初始化。 5. 结构体可以作为函数的参数或返回值。 6. 结构体可以嵌套定义,即在结构体的成员中定义另一个结构体。 7. 结构体可以使用typedef进行重命名,方便使用。 8. 在使用结构体时,需要注意结构体内存对齐的问题,避免出现内存浪费或程序崩溃等问题。 总之,在使用struct时需要了解其特点和使用方法,才能更好地发挥其作用。 ### 回答2: struct是一种用于定义自定义数据类型的关键字。在使用struct时,有一些注意事项需要注意。 首先,struct定义的数据类型是用户自定义的,因此在命名时应该遵循一定的命名规范,以便于其他人理解。通常,使用大驼峰命名法,将每个单词的首字母大写,并且不使用下划线。 其次,struct定义的数据类型可以包含多个成员变量,每个成员变量可以有不同的数据类型。在使用struct时,我们可以通过"."来访问结构体中的成员变量,但是需要注意成员变量的访问权限,私有成员变量需要通过get/set方法进行访问。 另外,struct定义的数据类型需要在使用之前进行声明。因此,如果需要在struct中引用自身类型,可以使用指针或者使用typedef来解决。 此外,struct还可以包含函数指针,用于实现面向对象的功能。通过将函数指针作为成员变量,可以将一组相关的操作组织在一起,并且可以根据实际需要动态指定具体的操作函数。 最后,struct定义的数据类型可以通过多种方式使用,可以作为函数参数、返回值、变量等进行传递和使用。由于struct占用的内存空间比较大,如果需要在函数内部使用struct变量,可以考虑使用指针传递,以减少内存开销。 总之,使用struct时,需要注意命名规范、成员变量的访问权限、类型声明的顺序、函数指针的使用以及内存开销的问题。只有正确地使用和理解struct,才能发挥其强大的功能和灵活性。 ### 回答3: 使用struct时需要注意以下几点: 1. 结构体的成员应该按照自然对齐原则进行排列,即成员的起始地址应该是其大小的整数倍。 2. 结构体的大小应该是其成员大小的倍数,并且大多数编译器会在结构体的末尾添加一些填充字节以满足对齐要求。 3. 可以使用#pragma pack(n)指令来设置结构体的对齐方式,其中n表示对齐的字节数。不过,在设置对齐方式时需要注意是否会影响程序的性能和便携性。 4. 结构体的初始化可以使用类似于数组的初始化方式,即在大括号中按顺序初始化成员,如果未初始化的成员将被自动赋值为0。 5. 结构体可以包含各种类型的数据成员,如整型、浮点型、字符型等,并且可以包含其他结构体或指针类型的成员。 6. 可以通过.运算符来访问结构体的成员,也可以通过结构体指针和->运算符来访问结构体的成员。 7. 结构体可以作为函数的参数和返回值,可以按值传递或传递指针。 8. 结构体的大小和成员的顺序可能会受到编译器和操作系统的限制,因此在不同的平台上可能会有所不同。 9. 结构体可以通过typedef关键字定义别名,以方便使用。 10. 在使用结构体时,应注意成员的命名,应该具有描述性并且易于理解,有助于提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值