【第22期】观点:IT 行业加班,到底有没有价值?

结构体学习心得

原创 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

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

相关文章推荐

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

结构体与函数: 关于传参,首先: void func(int); func(a.b.c); 把结构体中的int成员变量当做和普通int变量一样的东西来使用,是不用脑子就想到的一种方法。 另外两...

C 结构体 struct 详解

数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为...

结构体详解

1 概述   C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。 ...

C#如何定义结构体及访问结构体的成员

构结构的关键字 struct,struct类型是一种值类型通常用来封装小型变量组,如果冲结构创建一个对象并将对象赋给某个变量 则变量包含结构该变量放入结构的全部值,如果复制包含变量的结构,则将该复制所...

如何通过结构体元素找到结构体?

. 问题提出 我们知道,如果有一个结构体定义如下: struct _st {   int a;   char b; } st ;  我们可以通过st访问到a或者b,方法就是st.a(或者...
  • jibcy
  • jibcy
  • 2012-11-15 14:56
  • 2281

C#的Struct结构体

C家族中有一种类型叫做结构体 ,据说是牺牲存储空间,将对象直接存在栈中,效率很高,具体参见转载的博客。 java身为高级语言,完全舍弃了结构体,全部改用类来实现,都能实现,要求不高的话,为了省事就用...

C#中的结构体与类的区别

经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字st...

结构体的定义以及使用

结构的定义 定义一个结构的一般形式为: struct 结构名 { 成员表列 }成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明。 例如: struct stu { ...

定义结构体类型和初始结构体的3种方法

#define _CRT_SECURRE_NO_WARNINGS #include #include #include ////定义结构体类型的方法3种 /* 1) 定义类型 用类型定义变量 2...

Unity中的结构体(C#)

结构体和类很像,但完全不同。抱歉:) 如果你不知道结构体,或者你想用结构体,或者你不知道传引用和传值的差别,那么这一课就是为你量身定做。 Unity中的结构体 既然这个系列是为了Unity...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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