栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言结构体

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言结构体

C语言结构体
  • Fang XS.
  • 1452512966@qq.com
  • 如果有错误,希望被指出,学习技术的路难免会磕磕绊绊,不定期更新
结构体
  • 在C中,结构体是用户自定义数据类型,允许用户存储不同数据类型。
  • 在C中,结构体内可存放基本数据类型,复合数据类型,指针。
  • 在C中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
  • 在C中,所有相同/不同类型的数据都可以用结构体封装起来。
  • 在C++中,结构体可以包含函数,C不能,但是可以用函数指针。
  1. 语法
    • 第一种方式: struct struct_name{ int struct_member; };。
    • typedef方式: typedef struct _struct_name{ int struct_member; }struct_name;
  2. 定义变量
    • 第一种方式:
      • struct struct_name{ int struct_member; }struct_var; 直接在分号前定义结构体变量。
      • struct struct_name struct_var;
    • typedef方式:struct_name struct_var;
  3. 使用
typedef struct _struct_name{ 
    int struct_member; 
}struct_name;

int main(void)
{
	
    struct_name * pStructure = (struct_name *)malloc(sizeof(struct_name));
    pStructure->struct_member = 3;
    printf("struct_member: %dn", pStructure->struct_member);
    free( pStructure );	//释放内存
    pStructure = NULL;  //指针置空
    
    struct_name  Structure = { 5 };	// 直接初始化
    printf("struct_member: %dn", Structure.struct_member);
    return 0;
}
  • 匿名结构体:
struct{
    int member;
}anonymous_struct;

typedef struct _struct_name{ 
    int struct_member; 
    struct {
        int struct_nesting_member; 
    };
}struct_name;

int main(void)
{
    anonymous_struct.member = 8 ; //直接使用
    printf("struct_member: %dn", anonymous_struct.member);

	struct_name  Structure = { 5 ,3 };
    printf("struct_member: %dn", Structure.struct_member);
    printf("struct_nesting_member: %dn", Structure.struct_nesting_member);

    return 0;
}  
  • 结构体做函数参数
typedef struct _struct_name{ 
    int struct_member1; 
    int struct_member2;
}struct_name;

void print_struct_1(struct_name s){ //值传递
    printf("struct_member1: %dn", s.struct_member1);
    printf("struct_member2: %dn", s.struct_member2);
}

void print_struct_2(struct_name *s){ //指针传递
    printf("struct_member1: %dn", s->struct_member1);
    printf("struct_member2: %dn", s->struct_member2);
}

int main(void)
{
    struct_name  Structure = { 5 ,3 };
    print_struct_1( Structure );
    print_struct_2( &Structure );
    return 0;
}
  • 结构体占内存大小
struct sTest1{ 
    char member1;   // 1
    int member2;    // 4
    short member3;  // 2
};
struct sTest2{ 
    char member1;   // 1
    short member2;  // 2
    int member3;    // 4
};
struct sTest3{ 
    char member1;       // 1
    char member2[2];    // 2
    char member3[4];    // 4
};

int main(void)
{
    // 基本数据类型大小
    printf("sizeof char  = %dn", sizeof(char));    // 1 字节
    printf("sizeof short = %dn", sizeof(short));   // 2 字节
    printf("sizeof int   = %dn", sizeof(int));     // 4 字节

    printf("sizeof struct1 = %dn", sizeof(struct sTest1)); // 12
    printf("sizeof struct2 = %dn", sizeof(struct sTest2)); // 8
    printf("sizeof struct3 = %dn", sizeof(struct sTest3)); // 7
    return 0;
}
  • 位域
 
struct sTest1{ 
    char member1 : 2; //member1 是char类型的占2位。
    char member2 : 1; //member2 是char类型的占1位。
    char member3 : 3;
    char         : 1; //无名位域用来占位,表示不存放数据,考虑内存对齐需要用到。
    char member5 : 1;
};

int main(void)
{
    printf("sizeof struct1 = %dn", sizeof(struct sTest1)); // 1字节
    return 0;
}
  • 结构体在C中广泛大量使用,用途广泛。
  • 结构体内部成员变量是函数指针,通过修改函数指针指向的函数,可以实现C语言运行时的‘多态’。
  • 使用结构体跟函数指针可以实现简单的类,可以用C来面向对象编程,比如Linux。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号