C语言结构体
- Fang XS.
- 1452512966@qq.com
- 如果有错误,希望被指出,学习技术的路难免会磕磕绊绊,不定期更新
结构体
- 在C中,结构体是用户自定义数据类型,允许用户存储不同数据类型。
- 在C中,结构体内可存放基本数据类型,复合数据类型,指针。
- 在C中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
- 在C中,所有相同/不同类型的数据都可以用结构体封装起来。
- 在C++中,结构体可以包含函数,C不能,但是可以用函数指针。
- 语法
- 第一种方式:
struct struct_name{ int struct_member; };
。 typedef
方式: typedef struct _struct_name{ int struct_member; }struct_name;
- 定义变量
- 第一种方式:
struct struct_name{ int struct_member; }struct_var;
直接在分号前定义结构体变量。struct struct_name struct_var;
typedef
方式:struct_name struct_var;
- 使用
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: %d\n", pStructure->struct_member);
free( pStructure );
pStructure = NULL;
struct_name Structure = { 5 };
printf("struct_member: %d\n", 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: %d\n", anonymous_struct.member);
struct_name Structure = { 5 ,3 };
printf("struct_member: %d\n", Structure.struct_member);
printf("struct_nesting_member: %d\n", 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: %d\n", s.struct_member1);
printf("struct_member2: %d\n", s.struct_member2);
}
void print_struct_2(struct_name *s){
printf("struct_member1: %d\n", s->struct_member1);
printf("struct_member2: %d\n", 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;
int member2;
short member3;
};
struct sTest2{
char member1;
short member2;
int member3;
};
struct sTest3{
char member1;
char member2[2];
char member3[4];
};
int main(void)
{
printf("sizeof char = %d\n", sizeof(char));
printf("sizeof short = %d\n", sizeof(short));
printf("sizeof int = %d\n", sizeof(int));
printf("sizeof struct1 = %d\n", sizeof(struct sTest1));
printf("sizeof struct2 = %d\n", sizeof(struct sTest2));
printf("sizeof struct3 = %d\n", sizeof(struct sTest3));
return 0;
}
struct sTest1{
char member1 : 2;
char member2 : 1;
char member3 : 3;
char : 1;
char member5 : 1;
};
int main(void)
{
printf("sizeof struct1 = %d\n", sizeof(struct sTest1));
return 0;
}
- 结构体在C中广泛大量使用,用途广泛。
- 结构体内部成员变量是函数指针,通过修改函数指针指向的函数,可以实现C语言运行时的‘多态’。
- 使用结构体跟函数指针可以实现简单的类,可以用C来面向对象编程,比如Linux。