第10章指针(4学时) ·指针是一种数据类型,是指存放数据的内 存地址 ·指针变量是一种变量,该变量存放的数据 就是指针型的数据,即内存地址 程序中可以通过变量名或数组名[下标]来引 用变量或数组元素,也可以通过指针变量 来引用变量或数组元素
第10章指针 (4学时) • 指针是一种数据类型,是指存放数据的内 存地址 • 指针变量是一种变量,该变量存放的数据 就是指针型的数据,即内存地址 • 程序中可以通过变量名或数组名[下标]来引 用变量或数组元素,也可以通过指针变量 来引用变量或数组元素
指针变量的引用方式运行速度 更快 使用指针变量前需将指针变量 “指向”变量或数组(元素) “指向”就是将变量或数组(元素) 的地址存放到指针变量中
• 指针变量的引用方式运行速度 更快 • 使用指针变量前需将指针变量 “指向”变量或数组(元素) • “指向”就是将变量或数组(元素) 的地址存放到指针变量中
指针变量的定义和引用 指针就是地址,指针变量就是存放地址型 数据的变量 指针变量的定义 格式:存储类型数据类型*指针变量名1 [=初值1], °其中,存储类型:[auto]、 static 数据类型:任何基本类型 初值:变量、数组元素的地址或数 组的首地址
指针变量的定义和引用 • 指针就是地址,指针变量就是存放地址型 数据的变量 指针变量的定义 • 格式:存储类型 数据类型 *指针变量名1 [=初值1],…… • 其中,存储类型: [auto] 、static 数据类型:任何基本类型 初值:变量、数组元素的地址或数 组的首地址
注意: 1.在一个定义语句中,可以同时定义普 通变量、数组及指针变量,并赋初值 2.“数据类型”是将要指向的变量或数 组的数据类型 3.指针变量前必须有“火”号 4.初值是,&普通变量、&数据元素或数 组名
• 注意: 1. 在一个定义语句中,可以同时定义普 通变量、数组及指针变量,并赋初值 2. “数据类型”是将要指向的变量或数 组的数据类型 3. 指针变量前必须有 “*”号 4. 初值是,&普通变量、&数据元素或数 组名
例:指针变量的定义和初始化 int a, p1=&a a p1&a char s[101,*p2=S, S数组 float x[5],*p3=&×2; p3 x[2 Ⅹ[o] Ⅹ[1 2] [3] [4]
• 例:指针变量的定义和初始化 int a,*p1=&a; char s[10],*p2=s; float x[5],*p3=&x[2]; p3 p1 &a a p2 s S数组 &x[2] X[0] X[1] X[2] X[3] X[4]
指针变量的引用 ·程序中引用指针变量常用的方式有3种 1.给指针变量赋值 形式:指针变量=地址型表达式 作用:指针变量指向目标变量 例:给指针变量赋值 int i, al10], p p_|=&i p_|=a+6: p_|=a 注:a+6是&a[6] p i=&a[2] a+6xa+62(字节)
指针变量的引用 • 程序中引用指针变量常用的方式有3种 1. 给指针变量赋值 形式:指针变量=地址型表达式 作用:指针变量指向目标变量 • 例:给指针变量赋值 int i,a[10],*p_i; p_i=&i; p_i=a+6; p_i=a; 注:a+6是&a[6] p_i=&a[2]; a+6 a+6*2(字节)
2.直接使用指针变量名 ·需要用到地址时,可以直接引用指针变量名 例:直接使用指针变量名 float yl 10],p1=y, p2 p2=p1; scanf(%f,%f,p1,p2+6);/存入y0]y[6]*/ 3.通过指针变量来引用它所指向的变量 形式:大指针变量名
2. 直接使用指针变量名 • 需要用到地址时,可以直接引用指针变量名 • 例:直接使用指针变量名 float y[10],*p1=y,*p2; p2=p1; scanf(“%f,%f”,p1,p2+6);/* 存入y[0],y[6]*/ 3. 通过指针变量来引用它所指向的变量 • 形式:*指针变量名
例:利用“*指针变量”引用所指向的数据 float x1=126X2=20,x3,*p1=8x1,p3=&x3; char s[10]="abcd, *ps 1=S, *ps 2=S+4 p3=*p1*×2; ps2=*ps1+2; 地址运算* 解释: p3=*p1*×2;>X3=×1x2→X3=12.6×20 ps2=*ps1+2;xs[4]=+2xs[4]=S[2}→ S[4]=c
• 例:利用“*指针变量”引用所指向的数据 float x1=12.6,x2=2.0,x3,*p1=&x1,*p3=&x3; char s[10]=“abcd”,*ps1=s,*ps2=s+4; *p3=*p1*x2; *ps2=*ps1+2; /* 地址运算*/ 解释: *p3=*p1*x2; x3=x1*x2 x3=12.6×2.0 *ps2=*ps1+2; s[4]=s+2 s[4]=s[2] s[4]=‘c’
取地址运算符和指针运算符 ·“&”称为取地址运算符,运算结果是地址 “*”称为指针运算符,运算对象是地址 取地址运算符和指针运算符 名称对象数与位置运算符对象类型运算规则结果类型结合性 取单目前&任何类取运算地址 地缀 型的变对象的 址 量、数 组元素 地址 指单目前地址地址对变量或自右 针缀 应的变数组元向左 量或数素的类 组元素型
取地址运算符和指针运算符 • “&” 称为取地址运算符,运算结果是地址 • “ * ”称为指针运算符,运算对象是地址 取地址运算符和指针运算符 名称 对象数与位置 运算符 对象类型 运算规则 结果类型 结合性 取 地 址 单目前 缀 & 任何类 型的变 量、数 组元素 取运算 对象的 地址 地址 指 针 单目前 缀 * 地址 地址对 应的变 量或数 组元素 变量或 数组元 素的类 型 自右 向左
取地址运算符“&”的运算对象必须是已 定义过的变量或数组元素 例:取地址运算符的使用 int a, b[101: &a,&a[0],&b[9]正确 指针运算符“”的运算对象必须是地址 常用已赋值的指针变量,也可以是普通变 量的地址或数组元素的地址 运算结果是地址所对应的变量或数组元素
• 取地址运算符“&”的运算对象必须是已 定义过的变量或数组元素 • 例:取地址运算符的使用 int a,b[10]; &a,&a[0],&b[9] 正确 • 指针运算符“*”的运算对象必须是地址 • 常用已赋值的指针变量,也可以是普通变 量的地址或数组元素的地址 • 运算结果是地址所对应的变量或数组元素 等