第8章指针 1、理解指针的含义; 2、掌握指针变量的定义方法与引用; 3、掌握指向简单变量、数组、字符串和函数的指针的 使用; 4、掌握指针变量作为函数参数进行数据传递的方法; 5、掌握指针型函数的调用方法; 6、了解什么是指向指针的指针; 7、区分指向数组的指针和指针数组的概念 8、掌握指针作为main0函数命令行参数的使用方法;
第8章 指针 1、理解指针的含义; 2、掌握指针变量的定义方法与引用; 3、掌握指向简单变量、数组、字符串和函数的指针的 使用; 4、掌握指针变量作为函数参数进行数据传递的方法; 5、掌握指针型函数的调用方法; 6、了解什么是指向指针的指针; 7、区分指向数组的指针和指针数组的概念; 8、掌握指针作为main()函数命令行参数的使用方法;
§8.1指针的概念 ★变量与地址 内存中每个字节有一个编号一-地址 内存 程序中:inti; 200 float k 2001 Q2002) 编译或函数调用时为其分配内存单元 2003 k 2005 变量是对程序中数据 存储空间的抽象
§8.1 指针的概念 变量与地址 程序中: int i; float k; 内存中每个字节有一个编号-----地址 …... …... 2000 2001 2002 2005 内存 0 2003 i k 编译或函数调用时为其分配内存单元 变量是对程序中数据 存储空间的抽象
变量 指针简介 内存 int x int px 10 ED53 指针 地址 ED53 数据指针px指向变量x §指针也是一个变量,只不过该变量中存储的是另一个对象的内存地址 §如果一个变量存储另一个对象的地址,则称该变量指向这个对象 §由于指针值是数据,指针变量可以赋值,所以一个指针的指向在程序 执行中可以改变。指针pX在执行中某时刻指向变量x,在另一时刻也 可以指向变量y
指针简介 内存 10 int x 地址 ED53 变量 数据 ED53 int px 指针 指针 px 指向变量 x § 指针也是一个变量,只不过该变量中存储的是另一个对象的内存地址 § 如果一个变量存储另一个对象的地址,则称该变量指向这个对象 § 由于指针值是数据,指针变量可以赋值,所以一个指针的指向在程序 执行中可以改变。指针px在执行中某时刻指向变量x,在另一时刻也 可以指向变量y
表示定义指针变量 指针变量 不是运算符 ★指针变量的定义 令一般形式:[存储类型]数据类型指针名; 指针的目标变量的数据类型 合法标识符 int pl, p2 float *q 注意: 1、指针变量名是p1p2不是*p1,*p2 2、指针变量只能指向定义时所规定类型的变量 3、指针变量定义后,变量值不确定,应用前必须先赋值
注意: 1、指针变量名是p1,p2 ,不是*p1,*p2 2、指针变量只能指向定义时所规定类型的变量 3、指针变量定义后,变量值不确定,应用前必须先赋值 指针变量 指针变量的定义 ❖一般形式: [存储类型] 数据类型 *指针名; 指针的目标变量的数据类型 合法标识符 表示定义指针变量 不是‘*’运算符 例 int *p1,*p2; float *q ;
★指针与指针变量 ◆指针:一个变量的地址 ◆指针变量:专门存放地址的变量 指针 2000 整型变量i 2001 10 变量的地址 变量的内容 2002 2003 20044 变量 i pointer 200 -2000 指针变量变量地址(指针) 指向 地址存入 变量‖变量值 指针变量
…... …... 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 指针与指针变量 ❖指 针:一个变量的地址 ❖指针变量:专门存放地址的变量 2000 指针 指针变量 变量的地址 变量的内容 指针变量 变量 变量地址(指针) 变量值 指向 地址存入 指针变量
★&与运算符 1.两个有关的运算符:*、& 形式:&任意变量取地址运算符 指针变量指针运算符+ 含义:&a表示变量a所占据的内存空间的首地址 p表示指针变量p所指向的内存中的数据 void main( l、将指针变量指向被访间的变量;{imta=5b-=3; 如inta=5,pa;pa=&a; int*P; p=&a; 4,4 2、访问所指变量 b=p+5; 取内容:b=*p; printf(“%d”,p); printr("°odn",b) 存内容:*p=10; printf (o/od,o/odn", a, *p); 注意:*p若出现在”=”的右边或者表达式中,则为取内容 p若出现在”=”的左边,则为存内容
&与*运算符 1、将指针变量指向被访问的变量; 如 int a=5,*pa; pa=&a; 2、访问所指变量 取内容: b=*p; printf(“%d”,*p); 存内容:*p=10; 注意:*p若出现在”=”的右边或者表达式中,则为取内容 ; *p若出现在”=”的左边,则为存内容。 10 4,4
如有:inta=2,*p=&a,*q=a; 2.运算规则 printf(%dd\n",*p++, *(q++)); &:优先级相同, p=&a;q=&a; 且右结合 printf(d %d\n",*p,(*q)++)i ※与 !等单目运算符 的优先级相同 结果是:22 ※高于算术运算符*、/、% 32 连连看,找出有等价关系的式子 思考:下列表达式是何含义?inta=5,p=&a; 有什么要求? &*p*&a &P“&a(P)++ 等价于pa a &a“(p++)a++
连连看,找出有等价关系的式子 int a=5,*p=&a; &*p *&a (*p)++ *p++ a &a *(p++) a++
★直接访问与间接访问 ◆直接访问:按变量名存取变量值 ◆间接访问:通过存放变量地址的变量去访问变量 i=3:-0直接访间 2000 整型变量i 2001 20 2002 2003 2004 变量 i pointer 2005 2000 指针变量 2006 i_pointer=20;-间接访问
直接访问与间接访问 ❖直接访问:按变量名存取变量值 ❖间接访问:通过存放变量地址的变量去访问变量 i=3; -----直接访问 指针变量 …... …... 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 3 *i_pointer=20;-----间接访问 20
例 直接访问 ke*i pointer, 间接访问 2000) 整型变量i 2001 0 2002 一整型变量k 2003 10-…… 2004 变量 i pointer 2005 20 指针变量 2006
指针变量 …... …... 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 整型变量k 例 k=i; --直接访问 k=*i_pointer; --间接访问 10 例 k=i; k=*i_pointer;
★指针变量的初始化 一般形式:数据类型*指针名=初始她址值; 例inti; 赋给指针变量 int“p=& 变量必须与已说明过的 类型应一致 int *p=&i; int i: 例inti int*p=&i;用已初始化指针变量作初值 int *q
指针变量的初始化 一般形式: 数据类型 *指针名=初始地址值; 赋给指针变量, 不是赋给目标变量 例 int i; int *p=&i; 变量必须与已说明过的 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值