C语言:结构体

struct:

“结构体”是一种构造数据类型,现在一般叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。
定义一个结构的一般形式为:





struct结构名

{

//成员表列

};


一:在结构体中有哪些数据类型可以使用?

1.基本数据类型

2.上面定义好的自定义类型

3.不能使用自己定义一个自己的普通变量,但可以定义一个指向自己的指针

struct A
{
 int a;
 float b;
 char c;
 double d;
 short *f;
 //struct A g;//error不能准确得到字节数
 struct A *p;//ok

};


二:对结构体成员的访问
1.结构体普通变量通过"."号访问它的成员
2.结构体指针通过"->"访问它的成员

struct A        
{
 int a;
 int *b;
};

struct B
{
 struct A sa;
 int c;
 int *d;
};

 

 struct B  ss;//定义结构体普通变量
 struct B *ps = &ss;//定义结构体指针
 ss.sa.a;
 ss.sa.b;
 ss.c;
 ss.d;

 ps->sa.a;
 ps->sa.b;
 ps->c;
 ps->d;


typedef:

使用typedef为现有类型创建同义字,定义易于记忆的类型名。

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。


在编程中使用typedef目的一般有两个:

一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。


使用typedef为现有类型创建同义字,定义易于记忆的类型名。

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。


struct与typedef结合,提升为一种数据类型。typedef命名的别名相当于一种类型。


结构体的大小:

struct A
{ char a; //1+3 (放在地址号为4的倍数的字节上)
  int b:/4
};     //sizeof: 8

struct B
{ char a; // 1+1 (放在地址号为2的倍数的字节上)
  short b; // 2
  int c; // 4
};   //sizeof: 8

为什么struct C的大小为8
struct C
{ int  a; //4
  char b;//1
};     //sizeof: 5+3 (防止定义数组)

求以下结构体的sizeof:
1.
struct I
{ int  a; // 4
  struct II
   { float b; //2
      int c; //4+2 (对齐:8)
   }d;
      int *p; //4
      short e;  //2+2(对齐:8)
}; // sizeof: 8+8+4=20

2.
struct I
{ int  a;// 4
  struct II
   { float b; //2
      int c; //4  sizeof:10
   }double d; (double:8的倍数, sizeof=16)
      int *p; //4
      short e;  //2+2(对齐:8)
}; // sizeof: 16+8=24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值