轻松入门 实战应用 技术交流群387220290
数据类型大小
int main() { int a = 10; int b[10] ; printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ getchar(); return 0; } sizeof是操作符,不是函数;sizeof测量的实体大小为编译期间就已确定
数据类型别名
? 数据类型可以理解为固定大小内存块的别名,请问数据类型可以起别名吗? int main() { //Teacher t1; printf(\ printf(\ printf(\ printf(\ getchar(); return 0; } 数据类型的封装
? 1、void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 ? 2、用法1:数据类型的封装
int InitHardEnv(void **handle);
典型的如内存操作函数memcpy和memset的函数原型分别为
轻松入门 实战应用 技术交流群387220290
void * memcpy(void *dest, const void *src, size_t len); void * memset ( void * buffer, int c, size_t num );
? 3、用法2: void修饰函数返回值和参数,仅表示无。 如果函数没有返回值,那么应该将其声明为void型 如果函数没有参数,应该声明其参数为void int function(void) {return 1;} ? 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一维数组、二维数组有数据类型吗?int array[10]。 若有,数组类型又如何表达?又如定义? 若没有,也请说明原因。
抛砖:数组类型,压死初学者的三座大山
轻松入门 实战应用 技术交流群387220290
1、数组类型 2、数组指针
3、数组类型和数组指针的关系
思考2:
C语言中,函数是可以看做一种数据类型吗? a)若是,请说明原因
并进一步思考:函数这种数据类型,能再重定义吗? b)若不是,也请说明原因。 抛砖:
1.3.2变量本质分析
变量概念
? 概念:既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称
为常量。
? 变量定义形式: 类型 标识符, 标识符, … , 标识符 ; ? 例如:
int x ; int wordCut , Radius , Height ; double FlightTime , Mileage , Speed ;
轻松入门 实战应用 技术交流群387220290
变量本质
1、程序通过变量来申请和命名内存空间 int a = 0 2、通过变量名访问内存空间
(一段连续)内存空间的别名(是一个门牌号) 3、 修改变量有几种方法?
1、直接
2、间接。内存有地址编号,拿到地址编号也可以修改内存;于是横空出世了!(编程案例)
3、内存空间可以再取给别名吗? 4、数据类型和变量的关系
? 通过数据类型定义变量
5、总结及思考题
1 对内存,可读可写;2通过变量往内存读写数据;3 不是向变量读写数据,而是向变量所代表的内存空间中写数据。问:变量跑哪去了? 思考1:变量三要素(名称、大小、作用域),变量的生命周期? 思考2:C++编译器是如何管理函数1,函数2变量之间的关系的? ====》引出两个重要话题:
内存四区模型 函数调用模型
重要实验:
int main333() { //
//2种方法,通过变量直接操作内存 // 通过内存编号操作内存 int i = 0;
printf(\ *((int *)(1245024)) = 10; printf(\
轻松入门 实战应用 技术交流群387220290
}
printf(\ getchar(); return 0;
1.3.3程序的内存四区模型
内存四区的建立流程
流程说明
1、操作系统把物理硬盘代码load到内存 2、操作系统把c代码分成四个区 3、操作系统找到main函数入口执行