C语言程序设计学习笔记--用户建立数据类型。

9.1定义和使用结构体变量

1.定义:C语言允许用户自己建立不同类型数据组合成的组合型数据类型就是结构体

2.形式: struct 结构体名

{ 成员表列

类型名 成员名 ; } ; //成员可以属于另一结构体类型

3.定义结构体类型变量

(1)先 声明结构体类型 后 定义该类型变量

Struct studentstu1 ,stu2 ;

(2)在声明类型的同时 定义变量

例如:

Struct student

{ int xx;

char ; }stu1, stu2;

4.变量的初始化和引用

(1)运算符 “ . ” 优先级 MAX

? 示例:sturuct student 1= { .name = “gao bo” } ; // . name 代表结构体变量中 1中

成员1.name。其他的未指定的初始化为0,字符-‘\0’,指针-‘NULL’。

? 示例: 结构体变量名 . 成员名

Student . num//可以引用结构体变量的成员的值,

? 示例: 可以进行各种运算

Student1.score=student2.score

? 示例:

Student 1 = Student 2 //同类型结构体变量可以互相赋值

? 示例: 结构体变量成员,结构体变量的地址可以引用

Scanf(“%d”,&student1.num); //输入&student .num

Printf(“%o”,&student1); //输出首地址

代码:

#include

int main()

{

structStudent

{

int num;

char name[20];

float score;

}stu1,stu2;

scanf("%d %s %f",&stu1.num,stu1.name,&stu1.score );

scanf("%d %s %f",&stu2.num,stu2.name,&stu2.score );

printf("the max is") ;

if(stu1.score > stu2.score)

{

printf(" %d %s%f",stu1.num,stu1.name ,stu1.score );

}

elseif (stu1.score < stu2.score)

{

printf(" %d %s%f",stu2.num,stu2.name,stu2.score);

}

else

{

printf("%d %s%f",stu1.num,stu1.name ,stu1.score );

printf(" %d %s %f",stu2.num,stu2.name,stu2.score);

}

return 0;

}

9.2结构体数组

1. 定义: struct 结构体名

{成员表} 数组名【数组长度】;

2.初始化:

数组 = {初始化表}

StructStudent stu [3]={ “ ” , ” ” ,” ” }

9.3结构体指针

1.指向结构体变量的指针

? 指向结构体变量;

? 指向运算符“ ->”

示例: p->number ==== (*p).numberp指向结构体中number成员

? 指向结构体数组中得元素//类型必须相同

示例:

structstudent *p1 //p1可以指向struct student类型的变量或数组元素

3.指向结构体数组的指针

? 结构体数组在内存中连续存放。

4.用结构体变量和其指针作函数参数

结构体变量的值传递给另一个参数,三种方法:

(1)用结构体变量的成员作为参数

(2)用结构体变量作为实参

(3)指向结构体变量的指针作为实参,将变量地址传给形参

9.4用指针处理链表

1.链表:动态进行存储分配的一种结构。

结点:

? 用户需要的实际数据

? 指向下一个节点的地址(指针变量存放)

Struct Student

{

Int num;

Int score ;

Struct Student * next ; //next 指针变量,指向结构体变量

}

2.静态链表:所有节点在程序中定义,不是临时开开辟,也不能用完后释放

3.动态链表:结点一个个开辟,并建立起前后相链接的关系。

9.5共用体类型

1.定义:

几个不同的辩论共享一段内存的结构,成为“共用体”类型的结构。

2.一般形式:

Union 共用体名 union data

{ {

成员表列 int i ; char ch; float f;

}变量表列; }a,b,c//定义变量

3.区别

? 结构体变量:内存长度是各个成员内存长度之和,每个成员分别占有自己的内存单元。

? 共用体变量:内存长度等于最长的成员的长度

5.引用

? 不能引用公园提变量,只能引用共用体变量中的成员。

举例: a.i a.cha.f

6.注意

(1)每一次只能存放其中一个成员,而不是同时存放几个

(2)可以用共用体变量初始化,但是初始化表中只能由一个常量。

(3)最后一次被赋值的成员取代原有的

(4)地址与其各个成员同一个地址 &a.i &a.ch,&a.f

(5)不能对变量名赋值,也不能通过引用变量名得到一个值

9.6使用枚举类型

1.定义:

一个变量值有几种可能的值,所谓枚举“把可能的值一一举例‘。

2.一般形式:

enum [ 枚举名 ] { 枚举元素列表 };

enum Student { name, number, score};

3.注意:

(1)C编译对枚举类型的枚举元素按照常量处理 ,成为枚举常量。

(2)每一个枚举元素代表一个整数,根据顺序默认值为0,1,2,3,4

也可以人为制定 enumstudent{num1=8,num2=9.num3=6}number,

(3)枚举元素可以判断比较

9.7用typdef声明新类型名

1.用一个新的类型名代替原有类型名

? typedef 的作用——可以用typedef声明新的类型名来代替已有的类型名。

? 声明方式:typedef 类型名称 新的类型名称。

示例:

Typedef int integer ; //指定用integer为类型名。作用与int相同

IntI , j ; 等价于integer I , j;

2.命名一个简单的类型名代替复杂的类型表示方法

(1)新的类型名代表结构体类型

Typedef struct

{

int month;

int day;

int year;

} Date;//新的类型名Date, 可以用其定义变量

Date birthday ; //定义结构体类型变量birthday

Date *p;// 定义结构体变量p,指向其结构体类型数据

(2)命名一个新的类型名代表数组类型

(3)命名一个新的类型代表指针类型

(4)命名一个新的类型名代表指向函数的指针类型

? 总结:按照定义变量的方式,将变量名换成新的类型名,在前面加上typedef,声明了

新类型名代表原来的类型。

c语言用户自己建立数据类型,C语言程序设计学习笔记--用户建立数据类型相关推荐

  1. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  2. C语言程序设计学习笔记:P3-判断

    本系列博客用于记录学习浙江大学翁恺老师的C语言程序设计,系列笔记链接如下: C语言程序设计学习笔记:P1-程序设计与C语言 C语言程序设计学习笔记:P2-计算 C语言程序设计学习笔记:P3-判断 C语 ...

  3. C语言程序设计学习笔记:P5-循环控制

    本系列文章为浙江大学翁恺C语言程序设计学习笔记,前面的系列文章链接如下: C语言程序设计学习笔记:P1-程序设计与C语言 C语言程序设计学习笔记:P2-计算 C语言程序设计学习笔记:P3-判断 C语言 ...

  4. c语言程序与实验系统,C/C++程序设计学习与实验系统

    C/C++程序设计学习与实验系统 编辑 锁定 上传视频 C/C++程序设计学习与实验系统是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单易用的 C/C++程序设计学习与实验软件 ...

  5. C语言程序设计学习笔记:P1-程序设计与C语言

    本系列博客用于记录学习浙江大学翁恺老师的C语言程序设计,系列笔记链接如下: C语言程序设计学习笔记:P1-程序设计与C语言 C语言程序设计学习笔记:P2-计算 C语言程序设计学习笔记:P3-判断 C语 ...

  6. 0.《新概念51单片机C语言教程》(郭天祥)学习笔记

    看到之前的阅读量,有标题党的嫌疑,再接再厉,加油坚持自己的文风,相信会写的越来越好:) 继续更(一个人,一个记事本,一个PDF阅读器,装备全靠打) <新概念51单片机C语言教程>(郭天祥) ...

  7. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  8. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  9. TypeScript学习笔记2:数据类型

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 数据类型 ...

最新文章

  1. 30. Leetcode 83. 删除排序链表中的重复元素 (链表-双指针)
  2. Android应用权限管理总结
  3. [BUUCTF]pwn - wustctf2020_easyfast (Use After Free)
  4. camunda流程引擎如此简单「四」
  5. C语言改造二分法(Modified Binary Search)算法(附完整源码)
  6. 使用饼图_【Excel饼图使用系列】之使用饼图的注意事项及几个小技巧
  7. 网络流Dinic算法模板 POJ1273
  8. 视图请求限定装饰器-101.课时101.【Django视图高级】限制请求method装饰器(Av61533158,P101)
  9. android配置多个url,Retrofit中使用多个baseUrl
  10. STM8单片机烧录程序
  11. android switch的使用方法,Android开关控件,ToggleButton和Switch使用大全
  12. 利用stm32读取思岚A1雷达数据
  13. 国内多家视频下载网站关闭:或为暂避风头
  14. Redis的哨兵机制你知道多少撒
  15. 【软件硬件】精简指令集和复杂指令集的区别
  16. 记录一个屏幕适配的方案。
  17. 浙大计算机复试知识点整理,浙大计算机考研经验--坚持到底,终会成功
  18. php mysql ajax 单表多字段多关键词查询
  19. 火车头抓取豆瓣影评案例
  20. Hadoop高手之路5-MapRreduce

热门文章

  1. NPM包管理器跟换国内镜像CNPM
  2. Spring Restful Web服务示例 - 使用JSON,Jackson和客户端程序
  3. mysql使用语句_Mysql基本使用语句
  4. faker生成测试数据,一些数据生成方法摘取
  5. 配置hosts快速访问GitHub
  6. 一个数据包的旅程_数据科学语言的个人旅程
  7. electron 桌面程序_如何使用Electron使用JavaScript构建您的第一个桌面应用程序
  8. anaconda下python2和python3环境共存
  9. 算法:动态规划算法的最佳实践-背包问题
  10. CombineFileInputFormat 文件分片总结