第六章指针 §数组可以存放并处理一批同类型的数据,但数组的长度 在定义是在定义时必须给出,并且以后不能改变,也就 是说不能实现内存的动态分配,如果处理的这一批数据 个数是不确定的,就要定义足够大的空间,这样就会造 成存储空间的浪费。 §为此需要利用指针来实现内存的动态分配。 C程序设计中使用指针可以: ●使程序简洁、紧凑、高效 ●有效地表示复杂的数据结构 ●动态分配内存 ●得到多于一个的逐数返回值
第六章 指针 §数组可以存放并处理一批同类型的数据,但数组的长度 在定义是在定义时必须给出,并且以后不能改变,也就 是说不能实现内存的动态分配,如果处理的这一批数据 个数是不确定的,就要定义足够大的空间,这样就会造 成存储空间的浪费。 §为此需要利用指针来实现内存的动态分配。 C程序设计中使用指针可以: ⚫使程序简洁、紧凑、高效 ⚫有效地表示复杂的数据结构 ⚫动态分配内存 ⚫得到多于一个的函数返回值
案例介绍 §在实际问题中,有许多问题需要指针处理,如: (1)输入5个国家名称,对其排序并输出。 (2)定义一个函数,交换两个变量的值,要求把交换后 的结果返回。 §案例分析: >问题(1)中5个国家的名称为5个字苻串,一般是不等长的, 如果定义一个二维字符数组来存放并处理这5个字符串,会 出现两种问题:第一,定义的二维字符数组的第二维的长 度应该以名称最长的国家名为准,这样就会造成存储空间 的浪费;第二,在排序过程中,要不断交换字符串的存储 位置,就会影响程序的执行效率。为了解决以上问题,需 选择指针处理。 >间题(2)中定义的函数,用return语句只能返回一个值,如果 要返回多个值,只能借助指针对要交换值的变量的存储空 间进行访问
案例介绍 §在实际问题中,有许多问题需要指针处理,如: (1)输入5个国家名称,对其排序并输出。 (2)定义一个函数,交换两个变量的值,要求把交换后 的结果返回。 §案例分析: ➢ 问题(1)中5个国家的名称为5个字符串,一般是不等长的, 如果定义一个二维字符数组来存放并处理这5个字符串,会 出现两种问题:第一,定义的二维字符数组的第二维的长 度应该以名称最长的国家名为准,这样就会造成存储空间 的浪费;第二,在排序过程中,要不断交换字符串的存储 位置,就会影响程序的执行效率。为了解决以上问题,需 选择指针处理。 ➢ 间题(2)中定义的函数,用return语句只能返回一个值,如果 要返回多个值,只能借助指针对要交换值的变量的存储空 间进行访问
§6.1指针的概念 一、变量与地址 内存中每个字节有一个编号地址 内存 程序中: int i; : Q000 2001 float k; Q002 编译或函数调用时为其分配内存单元 2003 变量所在的内存单元的第 2005 一个字节的地址为该变量 的地址。 变量是对程序中 数据存储空间的抽象
§6.1 指针的概念 一、变量与地址 程序中: int i; float k; 内存中每个字节有一个编号-地址 . . 2000 2001 2002 2005 内存 0 2003 i k 编译或函数调用时为其分配内存单元 变量所在的内存单元的第 一个字节的地址为该变量 的地址。变量是对程序中 数据存储空间的抽象
地址与指针 >内存单元的编号也叫做地址 寄存箱 密码箱 保险箱 1000 2008 >变量的地址就称为变量的指针 p A 》变量的指针和变量的内容是两个不同的概念。 案例:寻找保险箱密码问题中,先找到存放密码箱地 址的寄存箱P,从中取出密码箱A地址,根据该地址找到密码 箱A,最后到密码A中取密码。在这里,寄存箱P中的1000就 是密码箱A的指针,2008是密码箱A的内容。 >在C语言中,允许用一个变量来存放指针,这种存放地址 的变量称为指针变量。因此,一个指针变量的值就是某个 内存单元的地址,也可以称为某内存单元的指针。 >一个指针是一个地址,是一个常量。而一个指针变量却可 以被赋予不同的指针值,是变量,指针变量简称指针。 >定义指针变量的目的是为了通过指针去访问内存单元
地址与指针 ➢ 内存单元的编号也叫做地址 ➢ 变量的地址就称为变量的指针 ➢ 变量的指针和变量的内容是两个不同的概念。 案例:寻找保险箱密码问题中,先找到存放密码箱地 址的寄存箱P,从中取出密码箱A地址,根据该地址找到密码 箱A,最后到密码A中取密码。在这里,寄存箱P中的1000就 是密码箱A的指针,2008是密码箱A的内容。 ➢ 在C语言中,允许用一个变量来存放指针,这种存放地址 的变量称为指针变量。因此,一个指针变量的值就是某个 内存单元的地址,也可以称为某内存单元的指针。 ➢ 一个指针是一个地址,是一个常量。而一个指针变量却可 以被赋予不同的指针值,是变量,指针变量简称指针。 ➢ 定义指针变量的目的是为了通过指针去访问内存单元
在程序中通过变量名引用变量的值,如: printf(“%d”,x); 输出变量x的值,程序执行时是将变量x翻译成 它所在的内存地址并把地址中的内容输出。这种使 用变量的方法叫直接访问。 C语言中还有一种操作变量的方法:通过变量 的地址来操作变量。这种使用变量的方法叫间接访 问
在程序中通过变量名引用变量的值,如: printf(“%d”,x); 输出变量x的值,程序执行时是将变量x翻译成 它所在的内存地址并把地址中的内容输出。这种使 用变量的方法叫直接访问。 C语言中还有一种操作变量的方法:通过变量 的地址来操作变量。这种使用变量的方法叫间接访 问