数组名代表数组的起始地址 inta[10]={1,3,5,7,9,11,13,15,17,19}; int*p;∥定义指向数组元素的指针变量 p=&a[0]; &.a[0] 1 a[o] 等价于p=a; 3 5 注意:“p=a;”的作用是“把数组a的第 7 一个元素的地址赋给指针变量p”。 9 11 定义指针变量时赋初值: 13 int *p=&a[o]; 15 int *p=a; 17 19 a[9] 通过指针引用数组元素: *p=100;lp所指向元素赋值为100 example7_3_1 息printf((“%dln”,*(p+1);Il显示p所指向元素下一个元素值 624
int a[10]={1,3,5,7,9,11,13,15,17,19}; int *p; //定义指向数组元素的指针变量 p=&a[0]; 等价于p=a; 注意: “p=a;”的作用是“把数组a的第 一个元素的地址赋给指针变量p”。 数组名代表数组的起始地址 定义指针变量时赋初值: int *p=&a[0]; int *p=a; 通过指针引用数组元素: *p=100; //p所指向元素赋值为100 printf(“%d\n”, *(p+1)); //显示p所指向元素下一个元素值 example7_3_1 6/24
引用数组元素时指针的运算 如果指针变量p已指向数组中 p,a 的一个元素,则p+1指向同一 a0] 数组中的后一个元素,p-1指 p+1,a+1 向同一数组中的前一个元素。 p1 a[1] float a[10],*p=a; a[2] ■ 假设a[0]的地址为2000, 则: p+i,a+i ● p的值为2000 a叮 p+1的值为2004 越界 p2 ● p-1的值为1996 ■如果指针p1和p2都指向同一数组。 a[6] ■ p2-p1的值是4 表示两者之间元素个数 a7] 不能p1+p2无意义 p+9,a+9 a8] a9] 恩 7/24
◼ 如果指针变量 p已指向数组中 的一个元素,则p+1指向同一 数组中的 后一个元素, p - 1 指 向同一数组中的 前一个元素。 ◼ float a[10],*p=a; ◼ 假设a[0]的地址为2000,则: p的值为2000 p+1的值为2004 p-1的值为1996 越界 a[0] a[1] a[2] ● a[i] ● a[6] a[7] a[8] a[9] p+1,a+1 p+i,a+i p+9,a+9 p, a ◼ 如果指针p1 和p2都指向同一数组 。 ◼ p2 -p1的值 是 4 表示两者之间元素个数 ◼ 不能p1+p2 无意义 p1 p2 引用数组元素时指针的运算 7/24
9.3.2通过指针引用数组元素 p,a int a[10],*p; p+1,a+1 a[O] p=a; a1] ■ p+和a+i就是a[叮的地址,它们指向数组a 的第个元素。 a[2] *(p+i)或*(a+i)是p+i或a+i所指向的数组元 素,即a叮。 p+i,a+i ● 指向数组元素的指针变量也可以带下标, *(a+i) 如p[叮与*(p+i)等价。 *p+i)】 a叮p叮 ● ■引用一个数组元素的两种方法: (1)下标法,如a[叮或p[叮 a[6] (2)指针法,如*(a+i)或*(p+i) ■ 可以通过指向数组元素的指针找到所需的 a7] 元素,使用指针法能使目标程序质量高。 p+9,a+9 a[8] a[9] 8/24
int a[10], *p; p = a; ◼ p+i和a+i就是a[i]的地址,它们指向数组a 的第i个元素。 ◼ *(p+i)或*(a+i)是p+i或a+i所指向的数组元 素,即a[i]。 ◼ 指向数组元素的指针变量也可以带下标, 如p[i]与*(p+i)等价。 a[0] a[1] a[2] ● a[i] p[i] ● a[6] a[7] a[8] a[9] p, a p+1,a+1 p+i,a+i p+9,a+9 *(a+i) *(p+i) 9.3.2 通过指针引用数组元素 ◼ 引用一个数组元素的两种方法: (1) 下标法,如 a[i] 或 p[i] (2) 指针法,如 *(a+i) 或 *(p+i) ◼ 可以通过指向数组元素的指针找到所需的 元素,使用指针法能使目标程序质量高。 8/24
例输出整型数组中的全部元素 下标法(直观) #include <stdio.h> for(i=0;i<10;i++) int mainO printf(%d”,at); il scanf("%od",a+i); 固定指针法1 for(i=0;i<10;i+ for(i=0;i<10;i++) printf(%d”,*(a+i); scanf("%d",&a[i]); 固定指针法2int*p; for(i=0;i<10;i++) for(i=0,p=a;i<10;i++) printf((%d”,a[叮); printf(%d”,*(p+i); printf("%In"); 游动指针法(效率高)int*p; return 0; for(p=a;p<(a+10);p++) printf(%d”,*p; 3 0123456789 用指针,不检查越界 0123456789 int a[10],*p=a; 阊 printf("%d",*(p+10)) 9/24
#include <stdio.h> int main() { int a[10]; int i; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf(“%d ”,a[i]); printf("%\n"); return 0; } 下标法 (直观) for(i=0;i<10;i++) printf(“%d ”,a[i]); 固定指针法1 for(i=0;i<10;i++) printf(“%d ”, *(a+i)); 游动指针法 (效率高) int *p; for(p=a;p<(a+10);p++) printf(“%d ”, *p); 固定指针法2 int *p; for(i=0,p=a;i<10;i++) printf(“%d ”, *(p+i)); 用指针,不检查越界 int a[10], *p=a; printf(“%d”,*(p+10)) scanf("%d",a+i); 例 输出整型数组中的全部元素 9/24