《程序设计》cs.u20119 指针变量的操作 如何让指针指向某一变量?因为我们不知道系统分 配给变量的真正地址是什么。 用地址运算符“&”解决。如表达式“&x”返回的是变量 x的地址。如:intp=&x; >&运算符后面不能跟常量或表达式。如&2是没有意义的 &(m*n+p)也是没有意义的 冷如何通过指针变量处理和改变它所指向的单元的值? >用引用运算符“*”解决。如*intp表示的是intp指向的 这个单元的内容。如:intp=5等价于x=5 >在对intp使用引用运算之前,必须先对intp赋值 程序设计-6
《程序设计》 cs.sjtu 2011.9 程序设计 - 6 指针变量的操作 ❖ 如何让指针指向某一变量?因为我们不知道系统分 配给变量的真正地址是什么。 ➢ 用地址运算符 “&” 解决。如表达式 “&x” 返回的是变量 x 的地址。如:intp = &x; ➢ & 运算符后面不能跟常量或表达式。如 &2 是没有意义的, &(m * n + p )。也是没有意义的 ❖ 如何通过指针变量处理和改变它所指向的单元的值? ➢ 用引用运算符 “*” 解决。如 *intp 表示的是 intp 指向的 这个单元的内容。如:*intp = 5 等价于 x = 5 ➢ 在对 intp 使用引用运算之前,必须先对 intp 赋值
《程序设计》cs.u20119 指针实例 如执行 如有 intp=Y+4: int X, *intp, Y X|3 1000 X=3 1004 Y=4 X 8 1000 tp=&X Y4 1004 intp 1000 p1000 注意:不能用intp=100; 因为我们永远不知道变量存储的真实地址,而且 程序每次运行变量地址可能都不同。 程序设计-7
《程序设计》 cs.sjtu 2011.9 程序设计 - 7 指针实例 如有: 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; 因为我们永远不知道变量存储的 真实地址,而且 程序每次运行变量地址可能都不同
《程序设计》cs.u20119 指针使用 冷指针变量可以指向不同的变量。如上例中intp指向x, 我们可以通过对ntp的重新赋值改变指针的指向。 如果想让intp指向y,只要执行intp=&y就可以了。 这时,int与x无任何关系。 同类的指针变量之间可相互赋值,表示二个指针指 向同一内存空间。 空指针 >指针没有指向任何空间 >空指针用常量NULL表示,NULL的值一般赋为0 >不能引用空指针指向的值 程序设计-8
《程序设计》 cs.sjtu 2011.9 程序设计 - 8 指针使用 ❖ 指针变量可以指向不同的变量。如上例中intp指向x, 我们可以通过对intp的重新赋值改变指针的指向。 如果想让intp指向y,只要执行intp=&y就可以了。 这时,intp与x无任何关系。 ❖ 同类的指针变量之间可相互赋值,表示二个指针指 向同一内存空间。 ❖ 空指针 ➢ 指针没有指向任何空间 ➢ 空指针用常量NULL表示,NULL的值一般赋为0 ➢ 不能引用空指针指向的值
《程序设计》cs.u20119 指针变量的使用 设有定义 执行语句:执行语句:执行语句: Int x, y; x=23 p1=&X; p1=34 ntp1,p2;y=234; p2=&y; p2=p1 1000 100023 100023 100034 1004 1004234 1004234 1004234 1008 pl1008 pl10081000p110081000p1 1012 p21012 p210121004p210121000p2 程序设计-9
《程序设计》 cs.sjtu 2011.9 程序设计 - 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=p1; 1000 34 x 1004 234 y 1008 1000 p1 1012 1000 p2
指针实例 《程序设计》cs.u20119 有以下结构 p1 a Bb 比较执行p1=p2和*p1=*p2后的不同结果。 解 B p B B 2 b 2 程序设计10
《程序设计》 cs.sjtu 2011.9 程序设计 - 10 指针实例 有以下结构 A p1 a B p2 b 比较执行 p1=p2和 *p1= *p2后的不同结果。 解: A p1 a B p2 b B p1 a B p2 b