传智播客C提高讲义.docx

上传人:b****1 文档编号:993661 上传时间:2022-10-15 格式:DOCX 页数:91 大小:1.43MB
下载 相关 举报
传智播客C提高讲义.docx_第1页
第1页 / 共91页
传智播客C提高讲义.docx_第2页
第2页 / 共91页
传智播客C提高讲义.docx_第3页
第3页 / 共91页
传智播客C提高讲义.docx_第4页
第4页 / 共91页
传智播客C提高讲义.docx_第5页
第5页 / 共91页
点击查看更多>>
下载资源
资源描述

传智播客C提高讲义.docx

《传智播客C提高讲义.docx》由会员分享,可在线阅读,更多相关《传智播客C提高讲义.docx(91页珍藏版)》请在冰豆网上搜索。

传智播客C提高讲义.docx

传智播客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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1