第六章指针
第六章 指针
内容 ■地址和指针的概念 ■ 变量的指针和指向变量的指针变量 ■数组与指针 ■字符串与指针 ■执行函数的指针 ■返回指针值的函数 ■指针数组和指向指针的指针 ■有关指针的数据类型和指针运算的小节
内容 ◼ 地址和指针的概念 ◼ 变量的指针和指向变量的指针变量 ◼ 数组与指针 ◼ 字符串与指针 ◼ 执行函数的指针 ◼ 返回指针值的函数 ◼ 指针数组和指向指针的指针 ◼ 有关指针的数据类型和指针运算的小节
(1.1)地址和指针的概念
(1.1)地址和指针的概念
地址和指针的概念(1/3) 为了说清楚什么是指针,必须弄清楚数据在内存中是如 何存储的,又是如何读取的。 如果在程序中定义了一个变量,在编译时就给这个变量 分配内存单元。系统根据程序中定义的变量类型,分配 定长度的空间。例如,一般微机使用的C系统为整型 分配4个字节,对实型变量分配4个字节,对字符型变量 分配1个字节。 内存区的每一个字节有一个编号,这就是“地址”。它 相当于旅馆中的房间号。在地址所标志的内存单元中存 放数据,这相当于旅馆中各个房间中居住旅客一样
地址和指针的概念(1/3) 为了说清楚什么是指针,必须弄清楚数据在内存中是如 何存储的,又是如何读取的。 如果在程序中定义了一个变量,在编译时就给这个变量 分配内存单元。系统根据程序中定义的变量类型,分配 一定长度的空间。例如,一般微机使用的C系统为整型 分配4个字节,对实型变量分配4个字节,对字符型变量 分配1个字节。 内存区的每一个字节有一个编号,这就是“地址”。它 相当于旅馆中的房间号。在地址所标志的内存单元中存 放数据,这相当于旅馆中各个房间中居住旅客一样
地址和指针的概念(2/3) 请务必弄清楚一个内 存单元的地址与内存 内存用户数据区 单元的内容这两个概 念的区别。 假设程序已定义了3个 2000 3 变量1 2002 6 变量j 短整型变量、j、k, 2004 9 变量k 编译时系统分配2000 和2001两个字节给变 3010 2000 变量i_pointer 量i,2002,2003字节 给i,2004, 2005给k。 如图所示:
地址和指针的概念(2/3) 请务必弄清楚一个内 存单元的地址与内存 单元的内容这两个概 念的区别。 假设程序已定义了3个 短整型变量i、j、k, 编译时系统分配2000 和2001两个字节给变 量i,2002,2003字节 给j,2004,2005给k。 如图所示:
地址和指针的概念(3/3) 在程序中一般是通过变量名来对内存单元进行存取操作 的。对变量值的存取都是通过地址进行的。 如: printfd”,); 其执行过程是:根据变量名与地址的对应关系(这个对应 关系是在编译时确定的,找到变量的地址2000, 然后 从由2000开始的四个字节中取出数据即变量的值3),把 它输出。 宝王楼辈死的战美聚影 化地称为“指针”。意思是通过它能找到以它为地址的 内存单元
地址和指针的概念(3/3) 在程序中一般是通过变量名来对内存单元进行存取操作 的。对变量值的存取都是通过地址进行的。 如: printf(“%d”, i); 其执行过程是:根据变量名与地址的对应关系(这个对应 关系是在编译时确定的),找到变量i的地址2000,然后 从由2000开始的四个字节中取出数据(即变量的值3),把 它输出。 由于通过地址能找到所需的变量单元,我们可以说,地 址“指向”该变量单元。因此在C语言中,将地址形象 化地称为“指针”。意思是通过它能找到以它为地址的 内存单元
(1.2)变量的指针和指向变量的指针变量
(1.2)变量的指针和指向变量的指针变量
概述 存放变量地址的变量是指针变量,用来指向另一个变量。 为了表示指针变量和它所指向的变量之间的联系,在程序中用 “*”符号表示“指向”。 例如,i-pointer代表指针变量,而*i-pointer是i-pointer所指向的变 量,如图所示: _pointer *i_pointer 2000 3 2000 因此,如下两个语句作用相同: 1=3 *i_pointer =3;
概述 存放变量地址的变量是指针变量,用来指向另一个变量。 为了表示指针变量和它所指向的变量之间的联系,在程序中用 “*”符号表示“指向” 。 例如,i-pointer代表指针变量,而*i-pointer是i-pointer所指向的变 量,如图所示: 因此,如下两个语句作用相同: i = 3; *i_pointer = 3;
定义一个指针变量 定义指针变量的一般形式为: 类型*指针变量名 如: int *p; 覆台个载堡正拾指针来最莓奥星。个变昼呢?下面用赋值塔句 int k=3; int *p=&k; 其中,“&”是取地址符号,即取变量k的地址。 它们之间的关系如下图所示: &
定义一个指针变量 定义指针变量的一般形式为: 类型* 指针变量名 如: int *p; 那么,怎样使一个指针变量指向另一个变量呢?下面用赋值语句 使一个指针变量指向一个整型变量: int k = 3; int *p = &k; 其中, “&”是取地址符号,即取变量k的地址。 它们之间的关系如下图所示:
定义指针变量的注意事项 在定义指针变量时要注意两点: 1)指针变量前面的“*”,表示该变量的类型为 指针型变量。注意:指针变量名是pointer_1、 pointer_2,而不是*pointer_.1、*pointer.2。这是与 以前所介绍的定义变量的形式不同的。 2)在定义指针变量时必须指定类型。因为不同 的类型在内存中占的字节数不一样
定义指针变量的注意事项 在定义指针变量时要注意两点: 1)指针变量前面的“*”,表示该变量的类型为 指针型变量。注意:指针变量名是pointer_1、 pointer_2,而不是*pointer_1、 *pointer_2。这是与 以前所介绍的定义变量的形式不同的。 2)在定义指针变量时必须指定类型。因为不同 的类型在内存中占的字节数不一样