8章第善于利用指针
8 善于利用指针 第 章
指针如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间。内存区的每一个字节有一个编号,这就是地址”。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为指针”。C语言中的地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息,或者说它是带类型的地址”。变量名地址内容int i=1j=2.k=3;存储单元的地址和存储单元的内容是两个不同的概念。//设int变量占2字节20001在程序中一般是通过变量名来引用变量的值。20012002直接按变量名进行的访问,称为宜直接访问”方式。还可以采用另一种称为22003间接访问”的方式,即将变量的地址存放在另一变量(指针变量)中2004k3然后通过该指针变量来找到对应变量的地址,从而访问变量。2005
指 针 如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译 系统根据程序中定义的变量类型,分配一定长度的空间。内存区的每一个字节有一个编号,这就 是“地址”。 由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为 “指 针”。 C语言中的地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息,或者说它是 “带类型的地址”。 存储单元的地址和存储单元的内容是两个不同的概念。 在程序中一般是通过变量名来引用变量的值。 直接按变量名进行的访问,称为“直接访问”方式。还可以采用另一种称为 “间接访问”的方式,即将变量的地址存放在另一变量(指针变量)中, 然后通过该指针变量来找到对应变量的地址,从而访问变量。 int i=1,j=2,k=3; //设int变量占2字节 变量名 地址 内容 i 2000 1 2001 j 2002 2 2003 k 2004 3 2005
指针变量
指针变量
使用指针变量的例子(例8.1】通过指针变量访问整型变量#include<stdio.h>int main()pointer1ainta=100,b=10;100&a*pointer1//定义整型变量ab,并初始化int *pointer_1,*pointer_2:bpointer_2//定义指向整型数据的指针变量pointer_1,pointer_210&b*pointer2//把变量a的地址赋给指针变量pointer_1pointer1=&a:pointer_2=&b://把变量b的地址赋给指针变量pointer2printf("a=%d.b=%d\n",a.b)://输出变量a和b的值注意定义指针变量时,左侧应有类型名,否则就printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2)不是定义指针变量。//输出变量a和b的值return 0;C:/WINDOWS)system32)cmd.exe口X//企图定义pointer_1为指针变量。出错*pointer_1;100,b=10Ppointer-1-100,*pointer_2=10请按任意键继续//正确,必须指定指针变量的基类型int*pointer_1
使用指针变量的例子 【例8.1】通过指针变量访问整型变量。 #include <stdio.h> int main() { int a=100,b=10; //定义整型变量a,b,并初始化 int *pointer_1,*pointer_2; //定义指向整型数据的指针变量pointer_1, pointer_2 pointer_1=&a; //把变量a的地址赋给指针变量pointer_1 pointer_2=&b; //把变量b的地址赋给指针变量pointer_2 printf("a=%d,b=%d\n",a,b); //输出变量a和b的值 printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2); //输出变量a和b的值 return 0; } pointer_1 a &a → 100 *pointer_1 pointer_2 b &b → 10 *pointer_2 注意 • 定义指针变量时,左侧应有类型名,否则就 不是定义指针变量。 *pointer_1; //企图定义pointer_1为指针变量。出错 int *pointer_1; //正确,必须指定指针变量的基类型
怎样定义指针变量类型名*指针变量名int*pointer1,*pointer_2左端的int是在定义指针变量时必须指定的基类型。指针变量的基类型用来指定此指针变量可以指向的变量的类型。前面介绍过基本的数据类型(如int,char,float等),既然有这些类型的变量,就可以有指向这些类型变量的指针,因此,指针变量是基本数据类型派生出来的类型,它不能离开基本类型而独立存在。在定义指针变量时要注意:(1)指针变量前面的*”表示该变量为指针型变量。指针变量名则不包含“*”。2)在定义指针变量时必须指定基类型。一个变量的指针的含义包括两个方面,一是以存储单元编号表示的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float等)。(3)如何表示指针类型。指向整型数据的指针类型表示为f'nt*”,读作指向int的指针”或简称'nt指针”。(4)指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量
怎样定义指针变量 类型名 *指针变量名; int *pointer_1, *pointer_2; 左端的int是在定义指针变量时必须指定的 “基类型 ”。指针变量的基类型用来指定此指针变量可以指向 的变量的类型。 前面介绍过基本的数据类型(如int,char,float等),既然有这些类型的变量,就可以有指向这些类型变量 的指针,因此,指针变量是基本数据类型派生出来的类型,它不能离开基本类型而独立存在。 在定义指针变量时要注意: (1) 指针变量前面的“*”表示该变量为指针型变量。指针变量名则不包含“*”。 (2) 在定义指针变量时必须指定基类型。一个变量的指针的含义包括两个方面,一是以存储单元编号表示 的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float等)。 (3) 如何表示指针类型。指向整型数据的指针类型表示为 “int * ” ,读作 “指向int的指针 ”或简称 “int 指针”。 (4) 指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量