第6章指针与字符串 H 第6章指针与字符串 61指针的概念 6,2指针型变量 63指针与数组 64指针与函数 65指针与类、对象 6,7动态内存分配与new和 delete运算符 6.8 string 类 BACK
第6章 指针与字符串 第6章 指针与字符串 6.1 指针的概念 6.2 指针型变量 6.3 指针与数组 6.4 指针与函数 6.5 指针与类、对象 6.7 动态内存分配与new和delete运算符 6.8 string类
第6章指针与字符串 H 61指针的概念 指针既是C++语言学习中的难点又是重点,要掌握 C++语言的精髓,必须学会熟练使用指针。本节先引 入指针的概念 为了说明什么是指针,必须弄清楚数据在内存中 是如何存储的,又是如何读取的。如果在程序中定义 了一个变量,在编译时就给这个变量分配内存单元
第6章 指针与字符串 6.1 指针的概念 指针既是C++语言学习中的难点又是重点,要掌握 C++语言的精髓,必须学会熟练使用指针。本节先引 入指针的概念。 为了说明什么是指针,必须弄清楚数据在内存中 是如何存储的,又是如何读取的。如果在程序中定义 了一个变量,在编译时就给这个变量分配内存单元
第6章指针与字符串 H 系统根据程序中定义的变量类型,分配一定长度的空 间。例如,许多计算机系统对整型变量分配两个字节, 对实型变量分配四个字节,对字符型变量分配一个字 节 内存区的每一个字节(即单元)有一个编号, 这就是“地址”,它相当于旅馆中的房间号。在地址 所标识的单元中存放数据,这相当于旅馆中各个房间 中住旅客一样
第6章 指针与字符串 系统根据程序中定义的变量类型,分配一定长度的空 间。例如,许多计算机系统对整型变量分配两个字节, 对实型变量分配四个字节,对字符型变量分配一个字 节,……。内存区的每一个字节(即单元)有一个编号, 这就是“地址” ,它相当于旅馆中的房间号。在地址 所标识的单元中存放数据,这相当于旅馆中各个房间 中住旅客一样
第6章指针与字符串 H 在此,务必弄清楚一个内存单元的地址与内存单元的 内容这两个概念的区别。如图6-1所示,假设程序已定 义了三个整型变量i、j、k,编译时系统分配2000和 2001两个字节给变量i,2002、2003字节给j,2004、 2005给k。在内存中已没有i、j、k这些变量名了,对变 量值的存取都是通过地址进行的
第6章 指针与字符串 在此,务必弄清楚一个内存单元的地址与内存单元的 内容这两个概念的区别。如图6-1所示,假设程序已定 义了三个整型变量i、j、k,编译时系统分配2000和 2001两个字节给变量i,2002、2003字节给j,2004、 2005给k。在内存中已没有i、j、k这些变量名了,对变 量值的存取都是通过地址进行的
第6章指针与字符串 H 2000 3 变量i 2002 6 变量j 2004 9 变量k 3030 2000 指针变量 ointer 图6-1内存单元分配示意
第6章 指针与字符串 图6-1 内存单元分配示意
第6章指针与字符串 H 还可以采用另一种称之为“间接访问”的方式。这类 似于在程序中定义整型、实型、字符等变量,也可以 定义这样一种特殊的变量,它是用来存放地址的,即 可以将变量的地址存放在另一个内存单元中。假设我 们定义了变量ⅰ pointer是存放整型变量的地址的,它被 分配为3030、3031字节单元。可以通过下面的语句将i 的地址存放到 I pointer中: 1 pointer=&i 这时, 1 pointer的值就是2000,即变量i所占用单元 的起始地址
第6章 指针与字符串 还可以采用另一种称之为“间接访问”的方式。这类 似于在程序中定义整型、实型、字符等变量,也可以 定义这样一种特殊的变量,它是用来存放地址的,即 可以将变量i的地址存放在另一个内存单元中。假设我 们定义了变量i_pointer是存放整型变量的地址的,它被 分配为3030、3031字节单元。可以通过下面的语句将i 的地址存放到i_pointer中: i_pointer=&i; 这时,i_pointer的值就是2000,即变量i所占用单元 的起始地址
第6章指针与字符串 H 要存取变量i的值,也可以采用间接方式:先找到 存放“i的地址”的单元地址(3030、3031),从中获得i 的起始地址(2000),然后从2000、2001字节中取出i 的值(3)。 简而言之,指针就是指向内存中某个单元的地址 值。所有的变量、数组、对象都是保存在内存中的。 凡是保存在内存中的信息,必须知道它在内存中的位 置。在计算机中,引用了“地址”这个词来代表内存 的某个位置。内存以字节为单位编址,称为内存地址。 BACK
第6章 指针与字符串 要存取变量i的值,也可以采用间接方式:先找到 存放“i的地址”的单元地址(3030、3031),从中获得i 的起始地址(2000),然后从2000、2001字节中取出i 的值(3)。 简而言之,指针就是指向内存中某个单元的地址 值。所有的变量、数组、对象都是保存在内存中的。 凡是保存在内存中的信息,必须知道它在内存中的位 置。在计算机中,引用了“地址”这个词来代表内存 的某个位置。内存以字节为单位编址,称为内存地址
第6章指针与字符串 H 62指针型变量 62.1指针型变量的声明 在C+语言中,任何一种数据类型都有对应的指针 类型,甚至指针类型本身也有指针类型。要声明一种 数据类型的指针型变量,必须在声明变量时将“*”号 加在数据类型的后面。定义指针变量的一般形式如下 *指针变量名
第6章 指针与字符串 6.2 指针型变量 6.2.1指针型变量的声明 在C++语言中,任何一种数据类型都有对应的指针 类型,甚至指针类型本身也有指针类型。要声明一种 数据类型的指针型变量,必须在声明变量时将“*”号 加在数据类型的后面。定义指针变量的一般形式如下: *指针变量名
第6章指针与字符串 H 定义中的“*”表示所定义的变量是一个指针变量, 以示与其它变量的区别。指针变量名的命名应符合标 识符的命名规则。指针变量的值是另一变量的指针(即 首地址)。定义中的数据类型是指针变量所指变量的数 据类型 注意,一个指针变量只能指向定义所指定数据类 型的变量,即存放定乂所指定数据类型的变量的地址, 因此,指针变量所存放的地址是一个具有指定数据类 型的地址。例如
第6章 指针与字符串 定义中的“*”表示所定义的变量是一个指针变量, 以示与其它变量的区别。指针变量名的命名应符合标 识符的命名规则。指针变量的值是另一变量的指针(即 首地址)。定义中的数据类型是指针变量所指变量的数 据类型。 注意,一个指针变量只能指向定义所指定数据类 型的变量,即存放定义所指定数据类型的变量的地址, 因此,指针变量所存放的地址是一个具有指定数据类 型的地址。例如:
第6章指针与字符串 H int*pnNumber / inUmber是用来保存一个指向int型 变量的指针的指针型变量 flad* pfrealNumber;/ pfRealNumber是用来保存一个指向 float型变量的指针的指针型变量 BOOL* reSult;/ reSult是保存一个指向int型变量 的指针的指针型变量,注意BOOL型 与jint型的共用特性
第6章 指针与字符串 int*pnNumber; //pnNumber是用来保存一个指向int型 变量的指针的指针型变量 f1oad*pfRealNumber; //pfRealNumber是用来保存一个指向 float型变量的指针的指针型变量 BOOL*pbResult; //pbResult是保存一个指向int型变量 的指针的指针型变量,注意BOOL型 //与int型的共用特性