C语言学习知识结构体(struct)常见使用方法

  • 格式:doc
  • 大小:70.85 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言结构体(struct)常见使用方法

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。

结构体定义:

第一种:只有结构体定义

[cpp]view plain copy

1.struct stuff{

2.char job[20];

3.int age;

4.float height;

5.};

第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义

[cpp]view plain copy

1.//直接带变量名Huqinwei

2.struct stuff{

3.char job[20];

4.int age;

5.float height;

6.}Huqinwei;

也许初期看不习惯容易困惑,其实这就相当于:

[cpp]view plain copy

1.struct stuff{

2.char job[20];

3.int age;

4.float height;

5.};

6.struct stuff Huqinwei;

第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用

[cpp]view plain copy

1.struct stuff yourname;

去定义第二个变量。

那么,附加变量初始化的结构体定义还可进一步简化出第三种:

[cpp]view plain copy

1.struct{

2.char job[20];

3.int age;

4.float height;

5.}Huqinwei;

把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。

结构体变量及其内部成员变量的定义及访问:

绕口吧?要分清结构体变量和结构体内部成员变量的概念。

就像刚才的第二种提到的,结构体变量的声明可以用:

[cpp]view plain copy

1.struct stuff yourname;

其成员变量的定义可以随声明进行:

[cpp]view plain copy

1.struct stuff Huqinwei = {"manager",30,185};

也可以考虑结构体之间的赋值:

[cpp]view plain copy

1.struct stuff faker = Huqinwei;

2.//或 struct stuff faker2;

3.// faker2 = faker;

4.打印,可见结构体的每一个成员变量一模一样

如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)[cpp]view plain copy

1.Huqinwei.job[0] = 'M';

2.Huqinwei.job[1] = 'a';

3.Huqinwei.age = 27;

4.nbsp;Huqinwei.height = 185;

结构体成员变量的访问除了可以借助符号".",还可以用"->"访问(下边会提)。

引用(C++)、指针和数组:

首先是引用和指针:

[cpp]view plain copy

1.int main()

2.{

3.struct stuff Huqinwei;

4.

5.struct stuff &ref = Huqinwei;

6. ref.age = 100;

7. printf("Huqinwei.age is %d\n",Huqinwei.age);

8. printf("ref.age is %d\n",ref.age);

9.

10.struct stuff *ptr = &Huqinwei;

11. ptr->age = 200;

12. printf("Huqinwei.age is %d\n",Huqinwei.age);

13. printf("ptr->age is %d\n",Huqinwei.age);

14.//既然都写了,把指针引用也加上吧

15.struct stuff *&refToPtr = ptr;

16. refToPtr->age = 300;

17. printf("Huqinwei.age is %d\n",Huqinwei.age);

18. printf("refToPtr->age is %d\n",refToPtr->age);

19.

20.

21.}

更正:之前给引用的初始化语句写错了,而且没注明引用是纯C中没有的东西(在这么个以C为幌子的博客中)。

引用是C++特有的一个机制,必须靠编译器支撑,至于引用转换到C中本质是什么,我有个帖子写过

结构体也不能免俗,必须有数组:

[cpp]view plain copy

1.struct test{

2.int a[3];

3.int b;

4.};

5.//对于数组和变量同时存在的情况,有如下定义方法:

6.struct test student[3] = {{{66,77,55},0},

7. {{44,65,33},0},

8. {{46,99,77},0}};

9.//特别的,可以简化成:

10.struct test student[3] = {{66,77,55,0},

11. {44,65,33,0},

12. {46,99,77,0}};

变长结构体

可以变长的数组

[cpp]view plain copy

1.#include

2.#include

3.#include

4.typedef struct changeable{

5.int iCnt;

6.char pc[0];

7.}schangeable;

8.

9.main(){

10. printf("size of struct changeable : %d\n",sizeof(schangeable));

11.