
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501

第9章 指针
第 9 章 指 针 2

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

案例程序只能使用自己申请的空间 ① #include ② int main() ③{ 239 ④ int i,a[3]; 235377872 ⑤ for(i=0;i<=3;i++) ⑥ {scanf("%d",&a叮);printf(("%d",a[);} ⑦ return 0; ⑧} 420
案例-程序只能使用自己申请的空间 4/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 小结 5

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

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

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

9.2.2指针变量的引用 1、指针变量常用的运算符(&、 &-一取变量的地址 一取指针所指向变量的内容 2000 10 ←整型变量m 2000 10 2001 2004 2000 2002 2003 2004 2000 k-变量p 3888 指针变量 ① &m-变量m的地址(2000) ② p-指针变量,p的值是地址值(2000) ③ *p-指针p所指向的变量m,*p的值是m的值-数据10。 ④ &p-指针变量p自己占用内存的地址(2004)0 9
1、指针变量常用的运算符 ( &、 *) &- 取变量的地址 *-取指针所指向变量的内容 . . 2000 2004 2006 2005 10 整型变量m 变量 p 2001 2002 2003 2000 指针变量 ① &m - 变量m的地址(2000) ② p -指针变量,p的值是地址值(2000)。 ③ *p -指针p所指向的变量m,*p的值是m的值-数据10 。 ④ &p -指针变量p自己占用内存的地址(2004)。 9 9.2.2 指针变量的引用

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