第九章指针 9.1指针的概念 9.2指针变量 9.3指针与数组 94指针与字符串 9.5指针与函数 9.6返回指针值的函数 97指针数组和多级指针
9.1 指针的概念 9.2 指针变量 9.3 指针与数组 9.4 指针与字符串 9.5 指针与函数 9.6 返回指针值的函数 9.7 指针数组和多级指针 第九章 指针
假设已定义了三个变量itik编译时将变量名转换成变量的地址,对变量名的存I 都是对地址进行的。如prit9d3j的执行过程先找的地址20,从开始的两 字节取出数据如 : scant(“%od”,ci); 再如:k=计先从2002001取出的值,再从2002、2003取出j的值相加后将其和 入2004、2005字节单元中。这种按变量地址存取变量的方式叫直接存取方式 地地离香装和内查正南鑫落啊径益内元 字inti,k内存用户数据区号,地址 间接存取方式:将变量的地址里的° 的存单元中存 3 变量i 存放在另一个变量中,要存取变量200 的值,先找到存放i的地址的变量,从 变量j 中取出的地址(2002公后到2002 6 2001地址单元中存取的值在C中2004 变量k 可以定义整型变量、实型变量、 字符变量,也可以定义一种特殊的 变量,存放地址的变量。 point1=&i; point1的值就是30200 oint 1 2000.i的起始地址存取的值??
指针是C的一个重要概念和特色,使用指针可以有效的表示复杂的 数据结构;动态的分配内存;方便使用字符串和数组;能直接使用 内存地址;所以掌握指针的使用,能使程序高效、简洁。 9.1 地址和指针的概念 地址:如果在内存中定义了一个内存变量,在编译时给这个内存变量分配内存单元, 系统根据定义的内存变量的类型,分配一定长度的内存空间;(基本整型2,实型4, 字符型1)。内存区的每一个字节有一个编号,叫地址 。在地址所标志的内存单元中存 放数据。分别相当于旅馆里的房间号和房间号里的人。 内存单元的地址和内存单元的内容:如下定义: int i,j,k; 内存用户数据区 ┇ 3 6 9 ┇ 2000 变量 i 变量 j 变量k point_1 2000 2002 2004 3010 假设已定义了三个变量int i ,j ,k编译时将变量名转换成变量的地址,对变量名的存取 都是对地址进行的。如printf(“%d”,i);的执行过程先找i 的地址2000,从开始的两个 字节取出数据 如:scanf(“%d”,&i); 再如:k=i+j 先从2000、2001取出i的值,再从2002、2003取出j的值,相加后将其和放 入2004、2005字节单元中。这种按变量地址存取变量的方式叫直接存取方式 间接存取方式:将变量i的地址 存放在另一个变量中,要存取变量i 的值,先找到存放i的地址的变量,从 中取出i的地址(2000),然后到2000、 2001地址单元中存取i的值.在C中 可以定义整型变量、实型变量、 字符变量,也可以定义一种特殊的 变 量 , 存放地址的变量 。 point_1=&i; point_1 的值就是 2000,i的起始地址,存取i的值???
i=3将3送到变量有两种表示方法:9.2变量的指针和指向变量 (1)将3送到变量所标志的单元中的指针变量 2000 变量的指针:就是变量地址。 (2)将3送到变量p1nter1指针变量:就是存放变量地址的 “指向”的卓元中(所标的单靈量,用来指向另一个变量的的 变量。 ter 指针变量和它所指向的变量之间 2000 的关系用“”:表示“指向” 2000 如: pointer 1是指针变量, 指针;地址指向某一单元如 i*pointer1是 pointer1所指向的变量 号指向某一房间一样。C中将地址形 象化的称为指针,一个变量的地址称 pointer1 pointer 为该变量的指针。如2000是变量的200 指针。 2000 指针变量:如果某一变量专门用来存pier1也是一个变量, 放另一变量的地址(即指轨,则称其为和变量i是同一回赛 指针变量。指针变量中存放1=3;,* poiter1=3;两个语句的作用 针地址)。请区分指针变量 相同。* porter1=3.的意思是将3送到指针 概念。 变量 pointer1所指向的变量中
i=3;将3送到变量i中有两种表示方法: (1) 将3送到变量i所标志的单元中 3 i 2000 (2) 将3送到变量pointer_1所 “指向”的单元中(i所标志的单 元)pointer_1 2000 3 i 2000 指针: 地址指向某一单元如同房间 号指向某一房间一样。C中将地址形 象化的称为指针,一个变量的地址称 为该变量的指针。如2000是变量i的 指针。 指针变量:如果某一变量专门用来存 放另一变量的地址(即指针),则称其为 指针变量。指针变量中存放的值是指 针(地址)。请区分指针变量和指针的 概念。 9.2 变量的指针和指向变量 的指针变量 变量的指针:就是变量地址。 指针变量:就是存放变量地址的 变量,用来指向另一个变量的的 变量。 指针变量和它所指向的变量之间 的关系用“*” :表示“指向” 如: pointer_1是指针变量, *pointer_1是pointer_1所指向的变量 pointer_1 *pointer_1 2000 3 i 2000 *pointer_1也是一个变量, 和变量i是同一回事 i=3; *poiter_1=3; 两个语句的作用 相同。*ponter_1=3;的意思是将3送到指针 变量pointer_1所指向的变量中
《1》指针变量的定义:C中规定所有的变量必须先定义,按类型分 配内存单元。指针变量是专门用来存放地址的,必须将它定义为 针类型 如: 般格式: 基类型*指针变量 int l,i: float *pointer 3 int*pointer 1,*pointer 2 char *pointer 4 poiter1和 pointer2是两个指向整型变量的文里,mn炬垄尖型, 表示指针变量所能指向变量的类型 使指针变量指向另一个变量的方法: pointer1=&i;将变量的地址存放到变量 pointer1中, pointer1就指向了变量 pointer2=&j;将变量j的地址存放到变量 pointer2中, pointer2就指向 量j 说1)定义指针变量前面的“”表示变量的类型为指针型。变量 名是 pointer1称 ointer 2 2)定义指针变量时必须指定基类型(因为不同类型的变量在在 中点的存情空国不后在指针的运算中是不同的)一个看针交量 只能指同同一个类型的变量。如nr1、 pointer.2只能指整型 变量。 pointer1和 pointer2是整型变量,是poir1和ner2所指向 的变量。而 ointer1、 pointer2 是指针变量
《1》指针变量的定义:C中规定所有的变量必须先定义,按类型分 配内存单元。指针变量是专门用来存放地址的,必须将它定义为 “指针类型” 如: int i,j; int *pointer_1, *pointer_2; poiter_1和pointer_2是两个指向整型变量的指针变量,int 是基类型, 表示指针变量所能指向变量的类型 一般格式: 基类型 *指针变量 float *pointer_3; char *pointer_4; 使指针变量指向另一个变量的方法: pointer_1=&i;将变量i的地址存放到变量pointer_1中,pointer_1就指向了变量i pointer_2=&j; 将变量j的地址存放到变量pointer_2中,pointer_2就指向了变量j 说明(1) 定义指针变量前面的“*”表示变量的类型为指针型。变量 名是pointer_1和pointer_2 (2) 定义指针变量时必须指定基类型(因为不同类型的变量在内存 中占用的存储空间不同,在指针的运算中是不同的)一个指针变量 只能指向同一个类型的变量。如pointer_1、pointer_2只能指向整型 变量。 *pointer_1和 *pointer_2是整型变量,是pointer_1和pointer_2所指向 的变量。而pointer_1、pointer_2是指针变量
★变量与地址 内存中每个字节有一个编号-地址 内存 程序中:inti Q000 2001 float K, Q2002 编译或函数调用时为其分配内存单元 2003 2005 变量是对程序中数据 存储空间的抽象
变量与地址 程序中: int i; float k; 内存中每个字节有一个编号-----地址 …... …... 2000 2001 2002 2005 内存 0 2003 i k 编译或函数调用时为其分配内存单元 变量是对程序中数据 存储空间的抽象