
第9章指针
1

内存与地址内存是以字节为基本单位的一片连续的存储单元。内存读写速度快,但是掉电即失(挥发性)。内存可以随机访问:只要指明要访问的内存单元的地址,就可以立即访问到该内存单元内存单元的编号---内存地址号:是一个无符号整数(习惯用16进制数表示),不同的编号表示不同的内存位置。内存的每个字节空间都有唯一的一个地址程序的所有活动的指令和数据都保存在内存内。程序运行时可以根据内存单元的编号准确地找到内存空间位置,并对该空间存储的内容进行读写
① 内存是以字节为基本单位的一片连续的存储单元。 不同的编号表示不同的内存位置。内存 的 ④ 程序的 程序运行时 可以根据内存单元的编号准确地找到内存空间位置,并对该 空间存储的内容进行读写。 2

案例---程序只能使用自己申请的空间#include int main()923int i,a[3];2353778725for (i=0;i<=3;i++)6scanf("%d",&a[])7printf("%d ",a[i]);87return O;103/20
3/20 ① #include ② int main() ③ { ④ int i,a[3]; ⑤ for ( i=0;i<=3;i++) ⑥ { scanf("%d",&a[i]); ⑦ printf("%d ",a[i]); ⑧ } ⑨ return 0; ⑩ }

本章知识点9.1地址和指针9.2指针变量9.3指向数组的指针变量9.4函数指针变量9.5返回指针值的函数9.6指针数组和指向指针的指针9.7小结
本章知识点 9.1 地址和指针 9.2 指针变量 9.3 指向数组的指针变量 9.4 函数指针变量 9.5 返回指针值的函数 9.6 指针数组和指向指针的指针 9.7 小结 4

变量、数组、函数与地址9.1.1.>变量、数组与函数在内存自已的地址一一通过地址来存取数据或指令的。函数定义后,该函数名对应了内存中某一段连续存储单元的起始地址?该地址开始的区域里依次存放着构成本函数指令语句序列。>不同的函数名对应了不同的起始地址,所获取的指令语句序列是不同的。2000H3000H.1000H整型变量.........2004H函短整型整型36u变量y熟代码数组3024H.(b)数组地址(a)变量地址(c)涵数地址图9.1·变量、数组、函数的内存地址与表示
9.1.1 变量、数组、函数与地址 Ø 变量、数组与函数在内存自己的地址-通过地址来存取数据或指令的。 Ø 函数定义后,该函数名对应了内存中某一段连续存储单元的起始地址, 该地址开始的区域里依次存放着构成本函数指令语句序列。 Ø 不同的函数名对应了不同的起始地址,所获取的指令语句序列是不同的

9.1.2变量的地址、变量的值每个变量占用一段内存单元,变量的值放在该内存单元中。变量的地址::系统分配给变量的内存单元的起始地址一日确定之后不能修改。变量的值:系统分配给变量的内存单元中的数据--程序执行过程中可以修改。说明:系统为不同类型的变量分配的空间大小也不同。int整型变量一一4个字节。1double双精度型变量一一8个字节。char字符型变量一一1个字节。C
① 每个变量占用一段内存单元,变量的值放在该内存单元中。 ② 变量的地址:系统分配给变量的内存单元的起始地址-一旦 确定之后不能修改。 ③ 变量的值:系统分配给变量的内存单元中的数据-程序执行 过程中可以修改。 ④ 说明:系统为不同类型的变量分配的空间大小也不同。 ① int整型变量——4个字节。 ② double双精度型变量——8个字节。 ③ char字符型变量——1个字节。 6 9.1.2 变量的地址、变量的值

9.2指针变量(定义、引用、作函数参数)--P179指针变量是一种特殊的变量一存放另一个变量的地址(指向另一个变量)类型说明符*指针变量名:指针变量的定义9.2.1指针变量所指向*表示定义指针变量合法标识符变量的数据类型不是*乘法运算注意1:指针变量必须先定义后使用。例1:intll定义指向int型变量的指针变量p1、p2*p1,*p2;①ll定义指向double型变量的指针变量p3double*p3;②char*p4;l/定义指向char型变量的指针变量p4③注意2:指针变量只能指向它定义时约定的类型的变量
9.2.1 指针变量的定义 注意1:指针变量必须先定义后使用。 例1: ① int *p1, *p2; //定义指向int型变量的指针变量p1、p2 ② double *p3; //定义指向double型变量的指针变量p3 ③ char *p4; //定义指向char型变量的指针变量p4 注意2:指针变量只能指向它定义时约定的类型的变量。 类型说明符 *指针变量名; *表示定义指针变量, 合法标识符 不是 * 乘法运算符 指针变量所指向 变量的数据类型 7 9.2 指针变量 (定义、引用、作函数参数)- P179 Ø 指针变量是一种特殊的变量—存放另一个变量的地址 -(指向另一个变量)

9.2.2指针变量的使用(&、*)指针变量常用的运算符取变量的地址取指针所指向变量的内容*&......PmD←整型变量m20001010200020012000200420022003<←变量p200420002885指针变量D&m--变量m的地址(2000(2000)p---指针变量,p的值是地址值*p----指针p所指向的变量m,*p的值是m的值-数据10。&p---指针变量p自已占用内存的地址(2004)8
1、指针变量常用的运算符 ( &、 *) 2000 2004 2006 2 5 2001 2002 2003 8 9.2.2 指针变量的使用

2、指针变量的赋值方式::指针变量定义时初始化赋值例1:inta,*p=&a;//指针变量p的初值是变量a的地址注意1:a的声明一定要在p的声明之前。注意2:int *p=NULL;/ /p不指向任何内存位置。NULL是标准库里定义的一个符号常量,值为0例2:intm;*p=&m;//p的初值是&m-m的地址int//g的初值是p的值&m一m的地址int *q =p;注意3:使用未初始化的指针变量是非常危险的。①int *p;②*p=100;I因为p存的是随机数,随机数表示的地址是否有效????儿结果无法预测!!!
2、 1)指针变量定义时初始化赋值: 例1:int a, *p=&a; //指针变量p的初值是变量a的地址 注意1:a的声明一定要在p的声明之前。 注意2: int *p=NULL; //p不指向任何内存位置。 // NULL是标准库里定义的一个符号常量,值为0 注意3:使用未初始化的指针变量是非常危险的。 ① int *p; ② *p=100; // 因为p存的是随机数,随机数表示的地址是否有效???? // 结果无法预测!!!

2、指针变量的赋值201赋值语句给指针变量赋值.←整型变量a200020例:1)int a=20;2int *p, *q;......0..03p=&a;l/给指针变量p赋值←指针变量p30002000000q=p;I/给指针变量q赋值.....4←一指针变量g50002000...10
10