★&与运算符 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; 用已初始化指针变量作初值