10.2指针与数组 通过指针访问数组元素 10.2.1指针与一维数组 int a[6]*pa, k; a a[o a[l a55] After execute pa-a, a[0]a[1 a[5] a pa patl pa+2
10.2 指针与数组 ◼ 通过指针访问数组元素 10.2.1 指针与一维数组 int a[6], *pa, k; a: a[0] a[1] …… a[5] After execute: pa=a; a[0] a[1] …… a[5] a: pa pa+1 pa+2
例10.5分别用下标法和指程序(3):地址法(指针常量 针法访问一维数组 maino 程序(1):下标法 main( {inta[S]={1,2,3,5,7},i; {inta[S]={1,2,3,5,7}, for(i=0;i<5;i++) for(i=0;i<5;i++) printf(%" (a+D); printf(%04d",aD) 程序(2):指针法 a1 a[0]<=p malr a+1 a inta[5}={1,2,3,5,7},p; a+2 a a+3 a[3] for(p=a, p<at5; pi+) 2357 a+4 a printf(%05d",p); 图10.8数组a的存储示意图
例10. 5 分别用下标法和指 针法访问一维数组。 程序(1):下标法 main() { int a [5]={1,2,3,5,7}, i; for(i=0; i<5; i++) printf("%4d", a[i]); } 程序(2):指针法 main() { int a[5]={1,2,3,5,7}, *p; for(p=a; p<a+5; p++) printf("%5d", *p); } 程序(3):地址法(指针常量) main() { int a[5]={1,2,3,5,7}, i; for(i=0; i<5; i++) printf("%5d",*(a+i)); }
指针运算 ■除赋值、取地址&、间接访间运算外,对指针 变量还可以进行加、减、比较运算 p=a;p=&a[0]; 如果p指向数组中的某个元素,则 p十+:指针变量p增1,使p指向下一个元素 ■p+k:该地址是指向p后面的第k各元素的指针 p-k该地址是指向p前面的第k各元素的指针 例如:有如下定义 int data[20], p=data, q=p+10 则解释以下表达式的含义 p*(p+1)(p)++*(p++)p-q
指针运算 ◼ 除赋值、取地址&、间接访问运算* 外,对指针 变量还可以进行加、减、比较运算. ◼ p=a; p=&a[0]; ◼ 如果p指向数组中的某个元素,则 ◼ p++: 指针变量p增1,使 p指向下一个元素 ◼ p+k: 该地址是指向p后面的第k各元素的指针 ◼ p-k: 该地址是指向p前面的第k各元素的指针 ◼ 例如:有如下定义 int data[20], p=data,q=p+10; 则解释以下表达式的含义: *p *(p+1) (*p)++ *(p++) p-q
例10.3利用指针求字符串的长度 分析:设字符串用一维字符数组str保存 算法: sl,首先让指针变量p指向字符串的首地址。 ,2,重复判断指针变量所指的字符(*p)是否等于字 符串结束标志“0:若不等,则指针p指向下 字符 S3,两个指针相减(pstr)即字符串的长度 其中,s2用循环结构实现。st是数组名,代表数 组的首地址,相当于指针常量
◼ 例10.3利用指针求字符串的长度。 分析:设字符串用一维字符数组str保存。 算法: s1, 首先让指针变量p指向字符串的首地址。 s2, 重复判断指针变量所指的字符(*p)是否等于字 符串结束标志‘\0’:若不等,则指针p指向下一 个字符。 S3, 两个指针相减(p-str)即字符串的长度。 其中,s2用循环结构实现。str 是数组名,代表数 组的首地址,相当于指针常量
例103程序: mainl &{m?e20 i char str[=you me", p char * p=str;/*等价于p=&足sr[O]*/ while( p!=0)p++ printf("n string length: %d",p-str) 运行结果 string length P+的含义:p指向下一个数组元素。思考:p+=2呢? P的含义:P和s之间数据的个数(只有都指向同一数组时使 用)。 程序中不能直接使用str++,因为不是指针变量,而是指针常量
例10.3 程序: str main() { char str[]="you & me"; p char *p; p=str; /*等价于p=&str[0]*/ while(*p!=‘\0’) p++; printf("\n string_length:%d",p-str); } 运行结果:string_length: 8 P++的含义:p指向下一个数组元素。思考:p+=2呢? P-str的含义:p和str之间数据的个数(只有都指向同一数组时使 用)。 程序中不能直接使用str++,因为str不是指针变量,而是指针常量。 ‘y’ ‘o’ ‘u’ ‘ ‘ ‘& ‘ ‘ ‘ ‘m’ ‘e’ ’\0’