16,标准C

来源:互联网 发布:java导出压缩包 编辑:程序博客网 时间:2024/05/22 17:10
/*
  达内学习 标准Cday16 2013-9-18
 */
预习:
1,函数指针
2,排序算法(qsort)
3,常用的其他标准函数
作业
1,简化版贪吃蛇


指针是用来存储地址数据的变量
NULL表示空地址
记录无效地址的指针叫做野指针


指针变量可以参与如下四则计算
指针+整数,指针-整数,指针-指针 计算结果是带单位的,单位是指针指向的变量的大小


指针可以作为函数的参数和返回值,局部变量和块变量的指针不可以赋值给指针类型的返回值变量
声明数组作为函数的形参,计算机内部实际使用指针变量代替


指针和数组的关系
1,指针变量可以赋值,但是数组名称不可以赋值
2,使用sizeof计算时指针变量和数组名称的结果不同,后者是整个数组内存大小,前者是指针本身大小
3,对数组名称取地址结果的数值和数组名称的数值一致,但是类型变成二维数组
(数组名称取地址以后可以使用两个下标)
地指针变量取地址得到的还是一个地址数据,,这个地址需要经过两次计算才能找到普通变量
这种地址数据应该记录在二级指针变量中,二级指针和数组之间没有练习,二维数组和指针数组之间类似一级指针和一维数组名称间的关系


声明指针时可以有两中使用const的关键字的方法
使用指针变量可以修改const变量的数值


通用类型指针没有说明地址数据的来源和级别
通用类型指针在使用之前必须做类型转换
隐式类型转换由计算机按照一定规则自动完成 强制类型那个转换由程序员在语句中指定
整数数类型之间进行的转换会保持二进制不变
在转换过程中生成新的变量而不会改变原有变量的内容
强制类型转换有可能造成数据损失


堆的管理函数 需要包含stdlib.h函数
malloc函数 用来从堆中分配连续多个字节空间
会把分配好的第一个字节的地址作为返回值,(这个地址要长期保存)执行失败则返回空地址NULL
函数返回值类型是void* 指针
free函数 用来释放堆分配和的一段内存空间
必须保证程序结束之前从堆中分配的内存空间都使用free释放掉了
使用free函数释放内存空间时必须把空间里第一个字节的地址作为参数
每段内存空间只能释放一次,一次分配的内存空间必须一次释放掉


使用malloc函数获得的地址可以赋值给指针类型的返回值变量(要求没有被free释放掉的)
这种时候内存空间应该由主函数释放


练习
1,编写一个函数分配多个变量的内存空间,(变量的类型可能是char,chort,int,变量的个数由调用函数指定)
2,给定两个点的位置,计算出中间点的位置,(用函数实现)
3,编写函数实现字符穿拷贝和合并,(新字符串要求从堆中分配空间)


calloc函数 可以从堆中分配n个某类型的变量,把分配和的所有变量都清0.
calloc函数 需要两个参数,分别表示单个变量的大小及变量个数


man可以查询C标准函数


realloc函数 可以调整一段已经分配和的内存空间的大小


使用二级指针作为函数形参,可以让函数外部的指针变量参与函数的执行过程,函数可以修改这个指针变量


作业:
1,改写mystrcpy函数
要求不使用返回值变量并且从堆中分配新字符串的内存空间。
2,改写人员信息管理系统,编写一个函数,从键盘读一个人员信息,并把他们记录在堆中分配的一个结构体变量里。把这个新结构体变量的地址赋值给返回值变量
3,编写主函数使用上一个函数从键盘读多个人员信息并记录到文件中