结构体学习心得

原创 2016年05月31日 09:07:35

结构体

1.简单认识结构体

#include<stdio.h>

/*struct tag(member list)(varible list)*/

                     成员列表     变量列表

struct stu

{

char name[20];

int age;

char sex[5];

char tele[12];

char addr[30]; 

};

int main()

{

struct stu stu2;

struct stu arr[10];

return 0;

}

2.结构体的重命名

①.typedef struct stu stu;

/*将结构体struct stu改为stu,便于后面的书写*/

②.typadef stu* pstu;

/*重命名一个结构体指针*/

3.结构体成员的访问

访问结构体成员的时候要用到结构体操作符“.”和“->”。

①直接访问(".")

int main()

{

stu stu;

strcpy(stu.name,“bit”);

/*将字符串“bit”放到数组arr中去,不可用直接赋值的方式,因为stu.name为一个地址常量*/

stu.name=20;

printf(“name=%s\n”,stu.name);

printf("age=%d\n",stu.age);

return 0;

}

②间接访问(“->”)

int main()

{

stu stu;

stu pstu=&stu;

strcpy((*pstu),"bit");

(*pstu).age=20;

return 0;

}

4.需要注意的

①.结构体的自引用

例:#include<stdio.h>

struct A

{

char name[20];

int age;

struct A sa;

};

/*以上是一种错误的写法,不可直接对结构体进行自引用*/

改进方法:

#inlcude<stdio.h>

struct A

{

char name[20];

int age;

struct A* pa;

};

int main()

{

struct A  sa1;

struct A  sa2;

struct A  sa3;

sa1.pa=&sa2;

sa2.pa=&sa3;

sa3.pa=NULL;

return 0;

}

/*通过指针的解引用访问到结构体,从而进行自引用*/

②.对结构体进行重命名的时候最好不要使用匿名

struct A

{

char name[20];

int age;

struct A  *pa;

}a;

③.不完全声明

struct B;

struct A

{

struct B *b;

}

/*在进行结构体嵌套引用时,如果嵌套结构体未经过声明,则需要在前面不完全声明*/

5.结构体初始化

int main ()

{

struct stu stu={"bit",20."nv","xi'an"};

printf("%s\n".stu.name);

return 0;

}

6.结构体内存分配

①.默认的对齐数是8

②.linux默认的对齐数是4

③.结构体的总大小是成员最大类型所占字节的整数倍

④.当两个结构体嵌套时,结构体的大小,嵌套结构体对齐到自己最大对齐数的整数处

⑤.每个结构体成员所分配的大小(对齐数)取本身大小与默认大小的较小值

⑥.在设计结构体成员顺序时,遵循将所占字节小的变量集中在一起的原则,可以节省内存空间。

⑦.当结构体作为函数参数的时候,传址的方式优于传值的方式

例1:#include<stdio.h>

struct S

{

int a;  

char c;

double d;

};

struct  S2

{

int a;

double d;

char c;

struct S ss;

};

此时struct C的大小为40个字节

例2:struct  S

{

int a;//第一个成员变量放在0偏移处  4  8 取4

char  c;//1 8 取1

double d;//8 8 取8

};


本文出自 “福大馨” 博客,请务必保留此出处http://10800121.blog.51cto.com/10790121/1721329

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构学习心得总结

开篇经过近一个月的学习,终于将郝斌老师讲的数据结构视频看完了~学习完成后,受益良多,也非常喜悦,非常开心,好像终于打了一场胜仗一样!我打算将这一个月的学习心得做一个汇总,记录下来。 希望能给初学者带...

Android学习心得(15) --- Dex文件结构解析(1)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助。 这一篇我们讲述一下Android可执行文件dex的结构解析。参考Leb128数据类型 Android学习心得(5) --- de...

[剑指offer学习心得]之:树的子结构

题目:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。二叉树结点的定义:/** * 二叉树的树结点 */ public static class BinaryTreeNode { ...

C++template元编程学习心得-switch结构

自己看modern c++ design的时候的一点心得和总结的啦,主要就是关于template元编程的写法的

数据结构学习心得

很多同学都说,数据结构不好学。个人认为,学习的难易程度很大程度上决定于个人的兴趣。把一件事情当做任务去做会很痛苦,当做兴趣去做会很快乐。如果想让自己在学习数据结构的过程中更轻松一些,请先培养对这门学科...

Android学习心得(16) --- Dex文件结构实例解析(2)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助。 这一篇我们讲述一下通过一个实例来分析dex文件结构和组成。参考Leb128数据类型 Android学习心得(5) --- dex...

数据结构---《大话数据结构》学习心得,定期更新---阿冬专栏!!!

最近给自己拟定了长期学习计划,也就是自己的学习主线: 数据结构       Java C语言 SQL Server数据库(中型数据库) 设计模式23种 操作系统---进程、线程、死锁、解锁、、、、...

算法导论学习心得1-----插入排序及两种不同插入方法的效率比较

插入排序的思想不多说了,就和打扑克牌时一样,拿到一张牌时从左到右比较后插入,不同的地方在于我们插入扑克牌是不用考虑移动顺序的。 按照书上第一个算法的代码,插入排序的算法如下: 插入排序1: int...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)