A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 楠瓜果 中级黑马   /  2014-7-19 19:48  /  1140 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

针对结构体不太懂,能不能简单的说下,但是要说的具体些,别太笼统

1 个回复

倒序浏览
这题目好大。。。我就说三点吧:

结构体的定义和结构体变量的声明
一个结构体的完整定义是这样的:
  1. struct Student {
  2.     char name[20];
  3.     int id;
  4.     int score;
  5. } stu1
复制代码

结构体以关键字struct开头,跟上结构体名称Student(可省略,如果省略,则结构体成员列表后必须跟上要声明的结构体变量,否则就永远无法再声明这个结构体类型的变量了),后接一对大括号,大括号内声明结构体成员(数组要求元素只能是同一类型,而结构体的成员可以是任何类型),最后是该结构体类型的变量列表(可省略,如果省略,则结构体名称不能省略)。

通常,定义结构体时暂不声明结构体类型的变量:
  1. struct Student {
  2.     char name[20];
  3.     int id;
  4.     int score;
  5. }
复制代码

等使用时再声明结构体变量,格式为:
  1. struct Student stu1; // 声明一个叫Student的结构体类型变量stu1
复制代码

声明结构体变量必须以struct开头,不能只写为Student XXX,因为Student不是一种数据类型。

每次声明变量都写 struct Student比较麻烦,可以借助typedef简化书写:
  1. typedef struct {
  2.     char name[20];
  3.     int id;
  4.     int score;
  5. } Student
复制代码

经过typedef后,Student就不是结构体名称,而真正成为一种数据类型了,之后声明变量只需要:
  1. Student stu1;
复制代码



内存结构
结构体和数组一样,在内存中占据一块连续的内存空间。如果不考虑内存对齐的要求,结构体占据的内存空间就等于各成员占据的字节数之和,比如Student占据28字节的内存。

结构体成员的访问
假定已经用typedef声明了一个结构体类型Student的变量stu,要访问其成员,可以用点运算符(.)
  1. stu.name = "Jack";
  2. stu.id = 1;
  3. stu.score = 90;
复制代码

由于结构体一般包含多个成员,占据内存空间较大,为节约资源,通常对结构体的操作是通过定义指向结构体的指针来完成的(OC对象底层就是结构体,因此操作OC对象都用指针),当使用指针访问结构体变量时,要用运算符 ->:
  1. Student *stu1 = (Student)malloc(sizeof(Student));
  2. stu1 -> id = 1;
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马