
第七章指针 §指针为函数提供修改变量值的手段 §指针为C的动态内存分配系统提供支持 §指针为动态数据结构(如例链表、队列、二叉树等) 提供支持 §指针可以改善某些子程序的效率
第七章 指针 §指针为函数提供修改变量值的手段 §指针为C的动态内存分配系统提供支持 §指针为动态数据结构(如例链表、队列、二叉树等) 提供支持 §指针可以改善某些子程序的效率

关于指针的原则 §学习原则 ★一定要学会 ★其实通常的应用很简单 冬与使用变量几乎无异 §使用原则 ★永远要清楚每个指针指向了哪里 ★永远要清楚指针指向的位置是什么
§学习原则 一定要学会 其实通常的应用很简单 ❖与使用变量几乎无异 §使用原则 永远要清楚每个指针指向了哪里 永远要清楚指针指向的位置是什么 关于指针的原则

§7.1变量的地址和指针 内存中每个字节有一个编号-地址 内存 程序中:inti, : 2000 2001 float k; Q002 编译或函数调用时为其分配内存单元 2003 2005
§7.1 变量的地址和指针 程序中: int i; float k; 内存中每个字节有一个编号-地址 . . 2000 2001 2002 2005 内存 0 2003 i k 编译或函数调用时为其分配内存单元

§7.1变量的地址和指针 指针:一个变量的地址 指针变量:专门存放变量地址的变量叫 指针 2000 整型变量i 10 变量的地址 变量的内容 2008 ←一变量i pointer .-0.000- 指针变量 变量地址(指针) 指向 地址存入 变量 变量值 指针变量
. . 2000 2008 . 整型变量i 10 变量i_pointer . 指针:一个变量的地址 指针变量:专门存放变量地址的变量叫~ 2000 指针 指针变量 变量的地址 变量的内容 指针变量 变量 变量地址(指针) 变量值 指向 地址存入 指针变量 §7.1 变量的地址和指针

§7.2变量的间接引用 ★&与*运算符 含义:取变具盒义:取指针所指向变量的内容 单目运算量逶算符 为逆运算 优先级:必理熊先级:2 结合性:自右结合 2000 整型变量i 10 2008 一变量i pointer -2000 指针变量 1 pointer 指针变量,它的内容是地址量 *i pointer 指针的目标变量,它的内容是数据 &ipointer-指针变量占用内存的地址
&与*运算符 ❖含义 含义: 取变量的地址 单目运算符 优先级: 2 结合性:自右向左 含义: 取指针所指向变量的内容 单目运算符 优先级: 2 结合性:自右向左 ❖两者关系:互为逆运算 ❖理解 . . 2000 2008 . 整型变量i 10 变量i_pointer . 2000 指针变量 i_pointer-指针变量,它的内容是地址量 *i_pointer-指针的目标变量,它的内容是数据 &i_pointer-指针变量占用内存的地址 §7.2 变量的间接引用

★指针变量与其所指向的变量之间的关系 1 pointer 指针变量,它的内容是地址量 *i pointer 指针的目标变量,它的内容是数据 &i pointer-指针变量占用内存的地址 i pointer 变量i i*i pointer 2000 3 &ii pointer *i pointer i=3;*i pointer=3
i_pointer-指针变量,它的内容是地址量 *i_pointer-指针的目标变量,它的内容是数据 &i_pointer-指针变量占用内存的地址 指针变量与其所指向的变量之间的关系 3 变量i 2000 i_pointer *i_pointer i *i_pointer &i i_pointer i=3; *i_pointer=3

★直接访问与间接访问 ?直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量 例 i=3; 直接访问 2000 整型变量i 20 2008 ←变量i pointer 2000 指针变量 例 *i pointer=20; 间接访问
直接访问与间接访问 ❖直接访问:按变量地址存取变量值 ❖间接访问:通过存放变量地址的变量去访问变量 例 i=3; -直接访问 指针变量 . . 2000 2008 . 整型变量i 10 变量i_pointer . 2000 3 例 *i_pointer=20; -间接访问 20

指针变量的定义 一般形式: 「存储类型] 数据类型*指针名; int *pl*p2 铸示定义指针变量 指计变量sta cF厢是*nae运箅苻 型 标识符 注意: 1、int *p1,*p2;与 int *p1,p2; 2、指针变量名是pl,p2,不是*pl,p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值
指针变量的定义 ❖一般形式: [存储类型] 数据类型 *指针名; 合法标识符 指针变量本身的存储类型 指针的目标变量的数据类型 表示定义指针变量 不是‘*’运算符 例 int *p1,*p2; float *q ; static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值

★指针变量的初始化 一般形式:[存储类型]数据类型*指针名=初始地址值; 例 int i; 赋给指针变量 int *p=&i; 变量必须已说明过 类型应一致 例 int i; 例 int *n&p=&i; int i;int *q-p; 用已初始化指针变量作初值 p、q指向同一变量
指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值; 赋给指针变量, 不是赋给目标变量 例 int i; int *p=&i; 变量必须已说明过 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值 p、q指向同一变量

查错: 指针变量必须先赋值,再使用 例 main( { int i=10; int *p; 2000 整型变量i *p=i; 10 printfd"p); 危险! 2008 ←一指针变量p 随机子 例 main( N int i=10; int *p, p=&i; printf%d"p);
例 main( ) { int i=10; int *p; *p=i; printf(“%d”,*p); } 危险! 例 main( ) { int i=10; int *p; p=&i; printf(“%d”,*p); } 指针变量必须先赋值,再使用 . . 2000 2008 . 整型变量i 10 指针变量p . 随机 查错: