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

# 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. [WASM] Read WebAssembly Memory from JavaScript

    We use an offset exporting function to get the address of a string in WebAssembly memory. We then cr ...

  2. javascript运算符应用

    下面的代码会输出什么?为什么? console.log(1 + "2" + "2"); console.log(1 + +"2" + &qu ...

  3. ZOJ 1494 Climbing Worm 数学水题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=494 题目大意: 一只蜗牛要从爬上n英寸高的地方,他速度为u每分钟,他爬完u需要 ...

  4. Python中字符串的解压缩

    今天在用Streaming-Python处理一个MapReduce程序时,发现reducer失败,原由于耗费内存达到极限了.细致查看代码时,发现有一个集合里保存着URL,而URL长度是比較长的,直接保 ...

  5. 爬虫抓取页面数据原理(php爬虫框架有很多 )

    爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...

  6. js实现操作等待提示loading……

    js实现操作等待功能,防止重复提交,界面友好,底部为灰色遮罩层,防止用户重复操作. 先看效果图:   接着看js代码: //关闭等待窗口 function closeWaiting() { var b ...

  7. php 模拟get提交

    方法一: $re = file_get_contents($url); print_r($re); 方法二: $ch = curl_init("http://www.jb51.net/&qu ...

  8. <Linux> Xen虚拟机下挂载

    //创建源vdisk挂载目录: mkdir vd1 //创建目标vdisk挂载目录: mkdir vd2 //只需第一次执行:  iscsiadm -m discovery --type sendta ...

  9. [TypeScript] Simplify asynchronous callback functions using async/await

    Learn how to write a promise based delay function and then use it in async await to see how much it ...

  10. pthread_join/pthread_exit的使用方法解析

    官方说法: 函数pthread_join用来等待一个线程的结束.函数原型为: extern int pthread_join __P ((pthread_t __th, void **__thread ...