传智播客C提高讲义.docx
- 文档编号:993661
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:91
- 大小:1.43MB
传智播客C提高讲义.docx
《传智播客C提高讲义.docx》由会员分享,可在线阅读,更多相关《传智播客C提高讲义.docx(91页珍藏版)》请在冰豆网上搜索。
传智播客C提高讲义
传智播客C提高讲义
传智扫地僧
1程序内存模型
1.1就业班引言
1.1.1问题引出
企业需要能干活的人
ØC学到什么程度可以找工作?
Ø对于C/C++初级开发者,怎么达到企业的用人标准
Ø就业问题
问:
老师,有没有一个框框?
有没有一个标准啊?
我们学什么哪?
C工程开发需要什么(培养什么能力)
成熟的、商业化的信息系统在分区、分层
信息系统的技术模型在分层
找出对我们初学者最近的那一层(哪些能力是你入行前,必须要掌握的)
C项目开发的套路(一套接口)
Ø//socket_clientpoolapi设计与实现
ØintsckClient_poolinit(void**handle);
ØintsckClient_getConnet(void*handle,void**hConnect);
ØintsckClient_sendData(void*hConnect,unsignedchar*data,intdataLen);
ØintsckClient_getData(void*hConnect,unsignedchar**data,int*dataLen);
ØintsckClient_getData_Free(void*hConnect,unsignedchar*data);
ØintsckClient_putConnet(void*handle,void**hConnect);
ØintsckClient_pooldestory(void**handle);
总结:
寻找到学习的标准
培养两种能力
Ø接口的封装和设计(功能抽象和封装)
Ø接口api的使用能力
Ø接口api的查找能力(快速上手)
Ø接口api的实现能力
Ø建立正确程序运行内存布局图(印象图)
Ø内存四区模型图
Ø函数调用模型图
1.1.2总体课程安排
课程大纲
ØC提高
ØC++
Ø数据结构
Ø总体时间1个月
实用专题
Ø总:
轻松入门实战应用
Ø形式1:
专题的形式录制话题集中便于初学者学习
Ø形式2:
知识点分段录制、细致讲解,从根本上提高初学者水平
Ø项目开发中的重要点做剖析
Ø指针铁律12345678910===》企业用人标准
1.1.3学员要求
Ø资料,时间空间管理
Ø工作经验,记录和积累
Ø临界点
Ø事物认知规律
Ø挑战*p,**p,***p
Ø提高课堂效率
Ø课堂例子,当堂运行。
Ø录制视频说明(不来,看视频)
ØC/C++学习特点
ØJava:
学习、应用、做项目
ØC:
学习、理解、应用、做项目
Ø多动手
Ø不动手,永远学不会
Ø关键点、关键时候,进行强化训练和考试
1.1.4小结
Ø建立信心
Ø接口的封装和设计
Ø指针教学,多年实践检验
Ø心态放轻松了
Ø分析有效时间
Ø尊重事物认知规律、给自己一次机会
1.2学员听课的标准
C语言学到什么程度,就可以听懂传智播客就业班第一阶段的课程了。
有没有一个标准?
Ø选择法或者冒泡法排序
Ø在一个函数内排序
Ø通过函数调用的方式排序
Ø数组做函数参数的技术盲点和推演
1.3内存四区专题讲座
1.3.1数据类型本质分析
数据类型概念
Ø“类型”是对数据的抽象
Ø类型相同的数据有相同的表示形式、存储格式以及相关的操作
Ø程序中使用的所有数据都必定属于某一种数据类型
数据类型的本质思考
Ø思考数据类型和内存有关系吗?
ØC/C++为什么会引入数据类型?
数据类型的本质
Ø数据类型可理解为创建变量的模具(模子);是固定内存大小的别名。
Ø数据类型的作用:
编译器预算对象(变量)分配的内存空间大小
Ø程序举例,如何求数据类型的大小sizeof(int*)
Ø请问:
数据类型可以有别名吗?
数据类型可以自定义吗?
数据类型大小
intmain()
{
inta=10;
intb[10];
printf("inta:
%d\n",sizeof(a));
printf("inta:
%d\n",sizeof(int*));
printf("intb:
%d\n",sizeof(b));
printf("intb:
%d\n",sizeof(b[0]));
printf("intb:
%d\n",sizeof(*b));
printf("hello.....\n");
getchar();
return0;
}
sizeof是操作符,不是函数;sizeof测量的实体大小为编译期间就已确定
数据类型别名
Ø数据类型可以理解为固定大小内存块的别名,请问数据类型可以起别名吗?
intmain()
{
//Teachert1;
printf("Teacher:
%d\n",sizeof(Teacher));
printf("u32:
%d\n",sizeof(u32));
printf("u8:
%d\n",sizeof(u8));
printf("hello.....\n");
getchar();
return0;
}
数据类型的封装
Ø1、void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。
Ø2、用法1:
数据类型的封装
intInitHardEnv(void**handle);
典型的如内存操作函数memcpy和memset的函数原型分别为
void*memcpy(void*dest,constvoid*src,size_tlen);
void*memset(void*buffer,intc,size_tnum);
Ø3、用法2:
void修饰函数返回值和参数,仅表示无。
如果函数没有返回值,那么应该将其声明为void型
如果函数没有参数,应该声明其参数为void
intfunction(void)
{return1;}
Ø4、void指针的意义
C语言规定只有相同类型的指针才可以相互赋值
void*指针作为左值用于“接收”任意类型的指针
void*指针作为右值赋值给其它指针时需要强制类型转换
int*p1=NULL;
char*p2=(char*)malloc(sizoeof(char)*20);
Ø5、不存在void类型的变量
C语言没有定义void究竟是多大内存的别名
Ø6、扩展阅读《void类型详解.doc》
数据类型总结与扩展
Ø1、数据类型本质是固定内存大小的别名;是个模具,c语言规定:
通过数据类型定义变量。
Ø2、数据类型大小计算(sizeof)
Ø3、可以给已存在的数据类型起别名typedef
Ø4、数据类型封装概念(void万能类型)
思考1:
C一维数组、二维数组有数据类型吗?
intarray[10]。
若有,数组类型又如何表达?
又如定义?
若没有,也请说明原因。
抛砖:
数组类型,压死初学者的三座大山
1、数组类型
2、数组指针
3、数组类型和数组指针的关系
思考2:
C语言中,函数是可以看做一种数据类型吗?
a)若是,请说明原因
并进一步思考:
函数这种数据类型,能再重定义吗?
b)若不是,也请说明原因。
抛砖:
1.3.2变量本质分析
变量概念
Ø概念:
既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。
Ø变量定义形式:
类型标识符,标识符,…,标识符;
Ø例如:
intx;
intwordCut,Radius,Height;
doubleFlightTime,Mileage,Speed;
变量本质
1、程序通过变量来申请和命名内存空间inta=0
2、通过变量名访问内存空间
(一段连续)内存空间的别名(是一个门牌号)
3、修改变量有几种方法?
1、直接
2、间接。
内存有地址编号,拿到地址编号也可以修改内存;于是横空出世了!
(编程案例)
3、内存空间可以再取给别名吗?
4、数据类型和变量的关系
Ø通过数据类型定义变量
5、总结及思考题
1对内存,可读可写;2通过变量往内存读写数据;3不是向变量读写数据,而是向变量所代表的内存空间中写数据。
问:
变量跑哪去了?
思考1:
变量三要素(名称、大小、作用域),变量的生命周期?
思考2:
C++编译器是如何管理函数1,函数2变量之间的关系的?
====》引出两个重要话题:
内存四区模型
函数调用模型
重要实验:
intmain333()
{
//
//2种方法,通过变量直接操作内存
//通过内存编号操作内存
inti=0;
printf("&i:
%d\n",&i);
*((int*)(1245024))=10;
printf("i:
%d",i);
printf("hello....\n");
getchar();
return0;
}
1.3.3程序的内存四区模型
内存四区的建立流程
流程说明
1、操作系统把物理硬盘代码load到内存
2、操作系统把c代码分成四个区
3、操作系统找到main函数入口执行
各区元素分析
1.4函数调用模型
1.4.1基本原理
1.4.2内存四区模型和函数调用模型变量传递分析
1、一个主程序有n函数组成,c++编译器会建立有几个堆区?
有几个栈区?
2、函数嵌套调用时,实参地址传给形参后,C++编译器如何管理变量的生命周期?
分析:
函数A,调用函数B,通过参数传递的变量(内存空间能用吗?
)
1.4.3提示学好C语言的关键
1.4.4如何建立正确的程序运行内存布局图
Ø内存四区模型&函数调用模型
Ø函数内元素
Ø深入理解数据类型和变量“内存”属性
Ø一级指针内存布局图(int*,char*)
Ø二级指针内存布局图(int**char**)
Ø函数间
Ø主调函数分配内存,还是被调用函数分配内存
Ø主调函数如何使用被调用函数分配的内存(技术关键点:
指针做函数参数)
======》学习指针的技术路线图
1.5内存四区强化训练
01全局区训练
Øchar*p1=“abcdefg”;
02堆栈区生命周期训练
ØCharp1[]=“abcdefg”;
Ø返回基本类型
Ø返回非基本类型
03堆栈属性训练
Ø测试heap生长方向
Ø测试stack生长方向
ØHeap、stack生长方向和内存存放方向是两个不同概念
Ø野指针
ØMalloc得到指针释放问题测试
Øfree(p)
Øfree(p+1),深入理解
1.6作业强化
训练1划出内存四区
voidmain26()
{
charbuf[100];
//byteb1=newbyte[100];
inta=10;//分配4个字节的内存栈区也叫临时区
int*p;//分配4个字节的内存
p=&a;//cpu执行的代码,放在代码区
*p=20;//
{
char*p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传智播客 提高 讲义