第十四讲第八章指针?数组的指针和指向数组的指针变量?字符串的指针和指向字符串的指针变量 一维数组的指针和指向一维数组元素的指针变量?数组的指针:数组的首地址。?一维数组的指针:一维数组的首地址,也就是一维数组中第一个元素的地址。?C语言规定:数组名代表数组的首地址。若有: int a[10]; 则: a 与& a[0] 是等价的?数组元素的指针:数组元素的地址。?指向一维数组元素的指针变量:存放一维数组首地址或数组元素地址的变量。 一维数组的指针和指向一维数组元素的指针变量?一维数组的首地址加上偏移量 x即可得到其他数组元素的地址。例如: int a[10], * p; p=a; / *等价于 p=&a[0] */ 则有: ?&a[1] 等价于 a+1 或 p+1 ?&a[i] 等价于 a+i 或 p+i 注意: p+i 指向数组的第 i个元素,而不是简单地使指针变量 p的值加 i。其所代表的地址实际上是 p+i × size ( size 为一个数组元素所占的字节数)。 一维数组的指针和指向一维数组元素的指针变量?访问一个数组元素主要有两种形式: ?下标法:用 a[i] 的形式存取数组元素。?指针法:用* (a+i) 或* (p+i) 的形式存取数组元素。其中 a是一维数组名, p是指向数组元素的指针变量。 p的初值为数组 a的首地址,可以通过指针变量赋值或加/减一个整数使 p指向不同的数组元素。例如: int a[10], * p=a; p++; / * p指向 a[1] * / p=a+5; / * p指向 a[5] */ 一维数组的指针和指向一维数组元素的指针变量例通过下标法存取数组元素#include <> void main( ) { int a[10], i; for(i=0; i<10; i++) scanf("%d", &a[i] ); for(i=0; i<10; i++) printf("%5d", a[i] ); printf("\n"); } 一维数组的指针和指向一维数组元素的指针变量例通过数组名计算元素地址存取数组元素#include <> void main( ) { int a[10], i; for(i=0; i<10; i++) scanf("%d", a+i ); for(i=0; i<10; i++) printf("%5d", * (a+i) ); printf("\n"); } 一维数组的指针和指向一维数组元素的指针变量例通过指针变量存取数组元素#include <> void main( ) { int a[10], * p; for(p=a; p<a+10; p++) scanf("%d", p ); for(p=a; p<a+10; p++) printf("%5d", *p ); printf("\n"); } 一维数组的指针和指向一维数组元素的指针变量?用指针法访问数组元素的注意事项: ?数组名是一个常量,不允许重新赋值。? p+i 和 a+i 均表示数组元素 a[i] 的地址,均指向 a[i] 。?* (p+i) 和* (a+i) 均表示 p+i 和 a+i 所指对象的内容,即 a[i] 。?* p++ 等价于* (p++) ,其作用是先得到*p, 再使 p=p+1 。 一维数组的指针和指向一维数组元素的指针变量?用指针法访问数组元素的注意事项: ?(* p)++ :表示将 p所指向元素的值加 1。例如: int a[5]={0, 2, 4, 6, 8}, * p; p=a+2; ( * p)++; printf("%d\n", * p); 程序段输出结果为: 5 一维数组的指针和指向一维数组元素的指针变量例分析下面程序的输出结
C课件第14讲 来自淘豆网m.daumloan.com转载请标明出处.