------------------------------------------------------------------

# include <stdio.h>

struct Student{  //Student可以看成一种数据类型

int age;

float score;

char sex;

};

int main(void){

struct Student st = {80,66.6,'F'};





return 0;

}

------------------------------------------------------------------

一、为什么需要结构体?

为了表示一些复杂的事物,而普通类型无法满足实际需求

二、什么叫结构体?

把一些基本类型组合在一起形成的一个新的复合数据类型叫做结构体。

三、如何定义一个结构体?

第一种方式

struct Student{  

int age;

float score;

char sex;

};

第二种方式

struct Student2{

int age;

float score;

char sex;

} str2;

第三种方式

strut {

int age;

float score;

char sex;

} str3;

四、怎么去使用结构体变量

1.赋值和初始化

 定义的同时可以整体赋初值

 如果定义完后,则只能单个的赋初值

--------------------------------------------------------------------

# include <stdio.h>





struct Student

{

int age;

float score;

char sex;

}

int main(void){

struct Student st = {80, 66.6, 'F'};  //整体赋值

struct Student st2;  //单个赋值

st2.age = 10;

st2.score = 88;

st2.sex = 'F';



printf("%d %f %c\n", st.age, st.score, st.sex);  //第一种取值方式

printf("%d %f %c\n", st2.age, st2.score, st2.sex);



return 0;

}

--------------------------------------------------------------------



2.如何取出结构体变量中的每一个成员

1.结构体变量名.成员名

2.指针变量->成员名

-------------------------------------------------------------------------

# include <stdio.h>





struct Student

{

int age;

float score;

char sex;

};

int main(void){

struct Student st = {40, 60, 'F'};

struct Student * pst = &st;





pst->age = 68;

st.score = 66;

printf("%d %f\n", st.age, pst->score);



return 0;

}

-------------------------------------------------------------------------


pst->age在计算机内部会被转化成(*pst).age

3.结构体变量的运算

结构体变量不能相加,不能相减,也不能相互乘除但结构体变量可以相互赋值

--------------------------------------------------------------------------

struct Student

{

int age;

char sex;

char name[100];

};  //分号不能省略

struct Student st1, st2;

st1+st2  st1*st2  st1/st2 都是错误的

st1 = st2  或者 st2 = st1 都是正确的

---------------------------------------------------------------------------

4.结构体变量和结构变量指针作为函数参数传递的问题

推荐使用结构体指针变量作为函数参数来传递

-------------------------------------------------------------------------

# include <stdio.h>





struct Student

{

int age;

float score;

char sex;

};





int main(void){

struct Student st;



InputStudent(&st);  //对结构体变量输入

OutputStudent(&st);  //对结构体变量输出



return 0;

}

void OutputStream(struct Student * ss){

printf("%d %c %s\n", ss->age, ss->sex, ss->name);

}

void InputStudent(struct Student * pstu){ //pstu只占4个字节

(*pstu).age  = 10;

strcpy(pstu->name, "zhangsan");

pstu->sex = 'F';

}

---------------------------------------------------------------------------

5.动态的构造存放学生信息的结构体数组

---------------------------------------------------------------------------

/*

2012年2月5日19:43:24

*/

# include <stdio.h>

# include <malloc.h>





struct Student

{

int age;

float score;

char name[100];

};

int main(void){

int len;

struct Student * pArr;

int i;



printf("请输入学生的个数:\n");

printf("len = ");

scanf("%d", &len);

pArr = (struct Student *)malloc(len * sizeof(struct Student));





for (i=0; i<len; ++i){

printf("请输入第%d个学生的信息\n", i+1);

printf("age = ");

scanf("%d", &pArr[i].age);





printf("name =");

scanf("%s", pArr[i].name);





printf("score = ");

scanf("%f", &pArr[i].score);

}

//输出

printf("\n\n\n");

for (i=0; i<len; ++i){

printf("第%d个学生的信息是\n", i+1);

printf("age = %d\n", pArr[i].age);





printf("name = %s\n", pArr[i].name);





printf("score = %f\n\n", pArr[i].score);

}



return 0;

}

输出结果:

请输入学生的个数:

len = 3

请输入第1个学生的信息

age = 22

name =李小强

score = 99

请输入第2个学生的信息

age = 23

name =杨鹏

score = 89

请输入第3个学生的信息

age = 24

name =王海涛

score = 88













第1个学生的信息是

age = 22

name = 李小强

score = 99.000000





第2个学生的信息是

age = 23

name = 杨鹏

score = 89.000000





第3个学生的信息是

age = 24

name = 王海涛

score = 88.000000

---------------------------------------------------------------------------



链表

c语言学习笔记(10)——结构体的更多相关文章

  1. c语言学习笔记之结构体存储

    今天讲讲结构体存储问题 首先,结构体简单说是对不同类型的封装,一开始我们可能会想结构体在内存中的存储的大小是直接元素的和 例如 我们可能会觉得是 结构体大小=int(4个字节)+ short(2个字节 ...

  2. C语言学习笔记--枚举&结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  3. C语言学习笔记10-结构体、枚举、联合体

    C语言学习笔记10-结构体.枚举.联合体    待传

  4. C#学习笔记之结构体

    1.概述 结构是一种与类相似的数据类型,不过它较类更为轻量,一般适用于表示类似Point.Rectangle.Color的对象.基本上结构能办到的类全都能办到,但在某些情况下使用结构更为合适,后面会有 ...

  5. 《PHP7底层设计与源码实现》学习笔记2——结构体对齐

    书里给了一段代码,假如有个结构体如下: struct test {     char a;     int b;     long c;     void* d;     int e;     cha ...

  6. contiki学习笔记---process结构体

    process,字面意义,进程,看看它的结构 struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #def ...

  7. Go语言学习笔记(10)——错误处理示例

    // 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de ...

  8. 【C#学习笔记】结构体使用

    using System; namespace ConsoleApplication { struct _st { public string name; public int age; } clas ...

  9. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  10. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

随机推荐

  1. LA 3644 - X-Plosives ( 也即UVA 1160)

    LA看题 请点击:传送门 UVA 上也有这题 :UVA 1160 - X-Plosives 题目大意就是如果车上存在 k 个简单化合物,正好包含 k 种元素 ,那么它们将有危险,此时你应该拒绝装车. ...

  2. 2、HZK和FreeType的使用

    HZK16汉字库的使用 定义如下: unsigned char str[]="我" 在运行时str被初始化为2个字节长度,内容为“我”的GBK码,为:0xCE(区码),0xD2(位 ...

  3. 用Java将字符串的首字母转换大小写

    在项目开发的时候会需要统一字符串的格式,比如首字母要求统一大写或小写,那用Java如何实现这一功能?下面一起来学习学习. 话不多说,直接上代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 ...

  4. 算法求解中的变量、数组与数据结构(STL 中的容器)

    本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...

  5. keil出错总结

    错误一: ..\APP\app.c(51): error:  #268: declaration may not appear after executable statement in block ...

  6. Eclipse 使用技巧之 ---- 查看本类调用和被调用列表

    当工程复杂的情况下,用眼睛去人工查看调用情况是很费力也没必要的.我们需要用 Eclipse 来做这点. (1)    我们查看本类调用他类情况可以直接看 import . (2)    如果要查看本类 ...

  7. Linux下kill进程脚本

    Linux下kill进程脚本 在Linux有时会遇到需要kill同一个程序的进程,然而这个程序有多个进程,一一列举很是繁琐,使用按名字检索,统一kill Perl脚本 使用方法 kill_all.pl ...

  8. C++设计模式实现--备忘录(Memento)模式

    一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态. 这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比較适用于功 ...

  9. Linux系统下的单调时间函数

    欢迎转载,转载请注明出处:http://forever.blog.chinaunix.net 一.编写linux下应用程序的时候,有时候会用到高精度相对时间的概念,比如间隔100ms.那么应该使用哪个 ...

  10. php数组全排列,元素所有组合

    <?php $source = array('pll','我','爱','你','嘿'); sort($source); //保证初始数组是有序的 $last = count($source) ...