《C++大学教程》2007.9 第7章间接访问一指针 指针的概念 指针运算与数组 指针作为函数参数和返回值 动态内存分配 水 字符串再讨论 指针数组与多级指针 指向多维数组的指针 指向函数的指针
《C++大学教程》 2007.9 v 指针的概念 v 指针运算与数组 v 指针作为函数参数和返回值 v 动态内存分配 v 字符串再讨论 v 指针数组与多级指针 v 指向多维数组的指针 v 指向函数的指针
指针介绍 《C++大学教程》2007.9 今天我们介绍C+语言最主要的特性:指针,为了成 为一个优秀的C语言程序员,你必须掌握指针并熟 练地使用它们。 指针 ·是内存的地址并可作为数据 •是一个灵活和危险的机制 ·允许共享处理数据 •允许内存动态分配(只要需要,而非预先定义)
《C++大学教程》 2007.9 今天我们介绍C++语言最主要的特性:指针,为了成 为一个优秀的C语言程序员,你必须掌握指针并熟 练地使用它们。 指针 •是内存的地址并可作为数据 •是一个灵活和危险的机制 •允许共享处理数据 •允许内存动态分配(只要需要,而非预先定义)
《C++大学教程》2007.9 指针的概念 指针就是把地址作 如在某一程序 为数据,可以把地 中定义了 址存储在内存中 int x; 2 1000 指针变量:存储地 X=2; 址的变量 如系统给x分 配的空间是 变量的指针:当一 1000号单元, 个变量存储另一个 则指向x的指 1000 变量的地址时,那 针是另一个变 我们说它就是那个 量,该变量中 变量的指针 存放的数据为 1000
《C++大学教程》 2007.9 v 指针就是把地址作 为数据,可以把地 址存储在内存中 v 指针变量:存储地 址的变量 v 变量的指针:当一 个变量存储另一个 变量的地址时,那 我们说它就是那个 变量的指针 1000 2 1000 如在某一程序 中定义了 int x; X=2; 如系统给x分 配的空间是 1000号单元, 则指向x的指 针是另一个变 量,该变量中 存放的数据为 1000
关于指针的几个问题 +大学教程》2007.9 如何定义一个变量是指针? 类型标识符 *指针变量; 如:int*intp; double *doublep 如何把某一变量的地址置入一个指针变量中?因为我们不 知道系统分配给变量的真正地址是什么。 > 用地址运算符“&”解决。如表达式“&x”返回的是变量× 的地址。如:intp=&x; > &运算符后面不能跟常量或表达式。如&2是没有意义的, &(m*n+p)。也是没有意义的 ~如何用指针变量处理和改变它所指向的单元的值? >用引用运算符“*”解决。如*intp表示的是intp指向的这 个单元的内容。 > 在对intp使用引用运算之前,必须先对intp赋值
《C++大学教程》 2007.9 v 如何定义一个变量是指针? 类型标识符 *指针变量; 如:int *intp; double *doublep v 如何把某一变量的地址置入一个指针变量中?因为我们不 知道系统分配给变量的真正地址是什么。 Ø 用地址运算符 “&” 解决。如表达式 “&x” 返回的是变量 x 的地址。如:intp = &x; Ø & 运算符后面不能跟常量或表达式。如 &2 是没有意义的, &(m * n + p )。也是没有意义的 v 如何用指针变量处理和改变它所指向的单元的值? Ø 用引用运算符 “*” 解决。如 *intp 表示的是 intp 指向的这 个单元的内容。 Ø 在对 intp 使用引用运算之前,必须先对 intp 赋值
《C++大学教程》2007.9 指针实例 如执行: 如有: *intp=Y+4; int X,*intp,Y; X=3; X 3 1000 Y=4; 4 1004 8 1000 intp=&X; Y 4 1004 intp 1000 intp 1000 注意:不能用 intp=100; 因为我们永远不知道变量存储的真实地址,而且 程序每次运行可能都不同
《C++大学教程》 2007.9 如有: int X, *intp, Y; X=3; Y=4; intp=&X; intp 1000 1004 Y 4 1000 X 3 如执行: *intp=Y+4; intp 1000 1004 Y 4 1000 X 8 注意:不能用 intp=100; 因为我们永远不知道变量存储的 真实地址,而且 程序每次运行可能都不同
《C++大学教程》2007.9 指针的定义及使用 指针变量可以指向不同的变量。如上例中itp指 向x,我们可以通过对intp的重新赋值改变指针的 指向。如果想让intp指向y,只要执行imtp-&y就 可以了。这时,intp与x无任何关系。 同类的指针变量之间可相互赋值,表示二个指针 指向同一内存空间。 父 空指针 >指针没有指向任何空间 >空指针用常量NULL表示,NULL的值一般赋为0 >不能引用空指针指向的值
《C++大学教程》 2007.9 v 指针变量可以指向不同的变量。如上例中intp指 向x,我们可以通过对intp的重新赋值改变指针的 指向。如果想让intp指向y,只要执行intp=&y就 可以了。这时,intp与x无任何关系。 v 同类的指针变量之间可相互赋值,表示二个指针 指向同一内存空间。 v 空指针 Ø 指针没有指向任何空间 Ø 空指针用常量NULL表示,NULL的值一般赋为0 Ø 不能引用空指针指向的值
《C++大学教程》2007.9 指针变量的使用 设有定义 执行语句: 执行语句: 执行语句: int x,y; X=23; p1=&x; *p1=34; int *pl,*p2; y=234; p2=&y; *p2=17; 0o4 1000 23 X 1000 23 1000 34 1004 234 1004 234 1004 17 10 pl 1008 pl 1008 1000 pl 1008 1000 pl 1012 p2 1012 p2 1012 1004 p2 1012 1004 p2
《C++大学教程》 2007.9 设有定义 int x, y; int *p1, *p2; 1000 x 1004 y 1008 p1 1012 p2 执行语句: x=23; y=234; 1000 23 x 1004 234 y 1008 p1 1012 p2 执行语句: p1=&x; p2=&y; 1000 23 x 1004 234 y 1008 1000 p1 1012 1004 p2 执行语句: *p1=34; *p2=17; 1000 34 x 1004 17 y 1008 1000 p1 1012 1004 p2
指针实例 《C++大学教程》2007.9 有以下结构 pl a p2 b 比较执行pl=p2和*p1=*p2后的不同结果。 解: A B pl a pl a B B p2 b p2 b
《C++大学教程》 2007.9 有以下结构 A p1 a B p2 b 比较执行 p1=p2和 *p1= *p2后的不同结果。 解: A p1 a B p2 b B p1 a B p2 b
《C++大学教程》2007.9 指针的初始化 指针在使用前必须初始化。 仅和别的变量一样定义指针,不初始化是一 个比较普通的错误。 没有初始化的指针可能指向任意地址,对这 些指针作操作可能会导致程序错误。 NULL是一个特殊指针值,称为空指针。它的 值为0。它可被用来初始化一个指针,表示不 指向任何地址
《C++大学教程》 2007.9 v 指针在使用前必须初始化。 v 仅和别的变量一样定义指针,不初始化是一 个比较普通的错误。 v 没有初始化的指针可能指向任意地址,对这 些指针作操作可能会导致程序错误。 v NULL是一个特殊指针值,称为空指针。它的 值为0。它可被用来初始化一个指针,表示不 指向任何地址
《C++大学教程》2007.9 第7章间接访问一指针 指针的概念 指针运算与数组 指针作为函数参数和返回值 动态内存分配 水 字符串再讨论 指针数组与多级指针 指向多维数组的指针 指向函数的指针
《C++大学教程》 2007.9 v 指针的概念 v 指针运算与数组 v 指针作为函数参数和返回值 v 动态内存分配 v 字符串再讨论 v 指针数组与多级指针 v 指向多维数组的指针 v 指向函数的指针