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

# 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. js 小数乘积位数太长

    function accMul(arg1,arg2) { var m=0,s1=arg1.toString(),s2=arg2.toString(); try{m+=s1.split(".& ...

  2. __block 双下划线定义block变量可在内部修改其值

    //如果外部的变量用了__block关键字,就可以在block内部修改这个变量的值. //block可访问外面定义的变量 int (^Num)(int, int)= ^(int a, int b){ ...

  3. 切换根控制器UIApplication 主屏幕UIScreen 读取文件资源NSBundle

    //主屏幕设为webView CGRect frame = [UIScreen mainScreen].applicationFrame; UIWebView *webView = [[[UIWebV ...

  4. 数据库中暂时表,表变量和CTE使用优势极其差别

    1 在写SQL时常常会用到暂时表,表变量和CTE,这三者在使用时各有优势: 1. 暂时表:分为局部暂时表和全局暂时表. 1.1局部暂时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接 ...

  5. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

  6. [ES7] Handle Errors in Asynchronous Functions

    This lesson shows how regular control flow statements such as try/catch blocks can be used to proper ...

  7. [Node.js] Pass command line arguments to node.js

    Command line arguments are often used to modify the behavior of an application or specify needed par ...

  8. JAVA学习路线图---(JAVA1234) 分类: B1_JAVA 2013-10-05 10:22 502人阅读 评论(1) 收藏

    转自:http://blog.csdn.net/pplcheer/article/details/12276999 第一阶段-Java基础        这一阶段很重要,关系到你后面阶段的学习,所以务 ...

  9. 苹果浏览器Safari对html标签submit按钮的默认渲染

    -webkit-appearance: none; 上面的设置就告诉Safari不要使用默认渲染,使用我们写好的 有这么一个webkit的私有属性: -webkit-appearance:none;  ...

  10. 序列 mysql

    CREATE TABLE emp_seq (seq INT); INSERT INTO emp_seq VALUES(0); UPDATE emp_seq SET seq = LAST_INSERT_ ...