c语言指针与内存剖析

上传人:今*** 文档编号:105870065 上传时间:2019-10-13 格式:DOCX 页数:7 大小:88.01KB
返回 下载 相关 举报
c语言指针与内存剖析_第1页
第1页 / 共7页
c语言指针与内存剖析_第2页
第2页 / 共7页
c语言指针与内存剖析_第3页
第3页 / 共7页
c语言指针与内存剖析_第4页
第4页 / 共7页
c语言指针与内存剖析_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《c语言指针与内存剖析》由会员分享,可在线阅读,更多相关《c语言指针与内存剖析(7页珍藏版)》请在金锄头文库上搜索。

1、【冯洛伊曼】冯诺依曼(John von Neumann,19031957),20世纪最重要的数学家之一,在现代计算机、博弈论、核武器和生化武器等诸多领域内有杰出建树的最伟大的科学全才之一,被后人称为“计算机之父”和“博弈论之父”。原籍匈牙利。布达佩斯大学数学博士。先后执教于柏林大学和汉堡大学。1930年前往美国,后入美国籍。历任普林斯顿大学、普林斯顿高级研究所教授,美国原子能委员会会员。美国全国科学院院士。早期以算子理论、共振论、量子理论、集合论等方面的研究闻名,开创了冯诺依曼代数。第二次世界大战期间为第一颗原子弹的研制作出了贡献。为研制电子数字计算机提供了基础性的方案。1944年与摩根斯特恩

2、(Oskar Morgenstern)合著博弈论与经济行为,是博弈论学科的奠基性著作。晚年,研究自动机理论,著有对人脑和计算机系统进行精确分析的著作计算机与人脑。主要著作有量子力学的数学基础(1926)、计算机与人脑(1958)、经典力学的算子方法、博弈论与经济行为(1944)、连续几何(1960)等。【冯洛伊曼计算机】 1945年6月,冯诺依曼提出了在数字计算机内部的存储器中存放程序的概念(Stored Program Concept),这是所有现代电子计算机的范式,被称为“冯 诺依曼结构”,按这一结构建造的电脑称为存储程序计算机(Stored Program Computer),又称为通用

3、计算机。冯诺依曼计算机主要由运算器、控制器、存储器和输入输出设备组成,它的的特点是:程序以二进制代码的形式存放在存储器中;所有的指令都是由操作码和地址码组成;指令在其存储过程中按照执行的顺序;以运算器和控制器作为计算机结构的中心等。冯诺依曼计算机广泛应用于数据的处理和控制方面,但是存在一些局限性。【内存、地址和变量】计算机中所有程序的运行都是在内存中进行的,计算机内存中的各个存储单元都是有序的,按字节编码。所谓编码就是对每一个物理存储单元(一个字节)分配一个号码,通常叫作“编址”。分配一个号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是所谓的“寻址”字节是最小的存储单位。故数组

4、中每个元素的地址总比前一个大。扩充:数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。变量代表内存中具有特定属性的一个存储单元。它是一个地址和一个值的统称。内存地址 指针型变量 整型变量【指针变量】指针变量是用来存储地址的,而一般变量是存储数值的。指针变量可指向任意一种数据类型,但不管它指向的数据占用多少字节,一个指针变量占用四个字节。指针变量的定义:格式为:类型名 *指针变量名。二维指针int *p;可以理解为基类型为(in

5、t *)类型。指针变量的初始化:指针变量在使用前必须要初始化,把一个具体的地址赋给它,否则引用时会有副作用,如果不指向任何数据就赋“空值”NULL。指针变量两种初始化方法一:int a=2,*p=&a;(定义的同时初始化)方法二:int a=2,*p; (定义之后初始化)p=&a;指针变量的引用:&是取地址符,*是间接访问运算符,它们是互逆的两个运算符。在指针变量名前加间接访问运算符就等价它所指向的量。指针的运算:int *p 中 *p 和p 的差别:*p 可以当做变量来用;*的作用是取后面地址p 里面的数值p 是当作地址来使用。*p+ 和(*p)+的之间的差别:改错题目中很重要*p+是地址会

6、变化。(*p)+ 是数值会要变化。三名主义:(考试的重点)数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)函数名:表示该函数的入口地址。字符串常量名:表示第一个字符的地址。三名主义:(考试的重点)数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)函数名:表示该函数的入口地址。字符串常量名:表示第一个字符的地址。指针变量是存放地址的。并且指向哪个就等价哪个,所有出现*p 的地方都可以用它等价的代替指向的变量。例如:int a=2,*p=&a;*p=*p+2;(由于*p 指向变量a,所以指向哪个就等价哪个,这里*p 等价于a,可以相当于是a

7、=a+2)【指针与数组】数组名实质上是一个指针常量(字符串与指针常量),所谓指针常量,就是“指针是常量”,即不能改变指针的地址,其指向于数组第一个元素的地址。ai=*(a+i),这也是为何数组的下标从0开始的原因。由于编译器不会知道有多少个直接要被访问,所以指针需要指明对应的数据类型,即该指针是指向某种数据类型的指针,根据该数据类型的字节数,才能确定指针指向数据对应内存的起始地址和终止地址。*(p+i)所以在数组中进行指针和地址运算时,对指针p进行加一个整数i操作时,实际上得到了一个地址,这个地址由p所在的地址加上数据类型p所含字节数乘以i得到;而并不是简单的p所在的地址加i个字节。【变量的生

8、命周期和作用域】在程序运行时内存中有三个区域可以保存变量:静态存储区、栈(stack)和堆(heap)。根据变量定义的位置可分为全局变量(定义在函数体外的变量)和局部变量(定义在函数体内的变量,包括形参)。所有的全局变量和静态局部变量(定义时使用关键字static)都保存在静态存储区,其特点是:在编译时分配内存空间并进行初始化。在程序运行期间,变量一直存在,直到程序结束,变量对应的内存空间才被释放。而所有的非静态局部变量(又称为自动变量)保存在栈(stack)中,其特点是:在变量所在的函数或模块被执行时动态创建,函数或模块执行完时,变量对应的内存空间被释放。换句话说,函数或模块每被执行一次,局

9、部变量就会重新被分配空间。如果变量定义时没有初始化,那么变量中的值是随机数。所有用malloc分配的内存(又称为动态内存)都在堆(heap)中,其特点是:一般通过指针来访问动态分配的内存。即可以通过free来手动释放动态内存,也可以在程序结束时由系统自动释放。以上讨论的是变量的生命周期,下面来看作用域。作用域指的是变量的可见范围,即在变量的生命周期内,程序的哪些部分可以使用该变量。全局变量的作用域从定义点开始一直到源文件的结束。如果要在定义点之前使用全局变量的话就需要使用关键字extern对作用域进行扩展。全局变量缺省是可以被其他文件引用的。如果希望仅限于本文件使用的话,需要在定义时使用关键字static。对于局部变量来说,无论是静态局部变量还是自动变量,作用域都仅限于定义该变量的函数或模块。动态内存只要没有被释放就可以在程序的任何地方使用,前提是要知道动态内存的地址。注:static加在全局变量前影响的是作用域,加在局部变量前影响的是生命周期。【传值和传址】函数的调用中,需要进行参数传递,即有一个将实际参数映射到形式参数的过程。最常见的有两种机制:一种是按值传递,函数收到的是实际参数的值按位拷贝;另一种是按引用传递,函数收到的还是实际参数的引用内存地址。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号