3数组元素的引用 数组元素的引用,既可用下标法,也可用指针法。使用下 标法,直观;而使用指针法,能使目标程序占用内存少、运 行速度快。 432通过指针引用数组元素 如果有 int array10. pointer=ray;",则: (1) pointer+aray+1都是数组元素aray的地址,如图 9-6所示。 (2)* pointer+)和*ray+就是数组元素aray (3)指向数组的指针变量,也可将其看作是数组名,因 而可按下标法来使用。例如, pointer[等价于* pointer+i。 注意: pointer+1指向数组的下一个元素,而不是简单地使 指针变量 pointer的值+1。其实际变化为 pointer+1* ize(size为 元素占用的字节数)。 例如,假设指针变量 pointer E的当前值为300,则 pointer-+1 为3000+1*2=3002,而不是3001
3.数组元素的引用 数组元素的引用 数组元素的引用,既可用下标法,也可用指针法。使用下 数组元素的引用,既可用下标法,也可用指针法。使用下 标法,直观;而使用指针法,能 标法,直观;而使用指针法,能使目标程序占用内存少、运 使目标程序占用内存少、运 行速度快。 4.3.2 通过指针引用数组元素 通过指针引用数组元素 如果有“int array[10],*pointer=array; array[10],*pointer=array;” ,则: (1)pointer+i pointer+i和array+i array+i都是数组元素array[i] array[i]的地址,如图 9-6所示。 (2)*(pointer+i) (pointer+i)和*(array+i) (array+i)就是数组元素array[i] array[i]。 (3)指向数组的指针变量,也可将其看作是数组名,因 数组的指针变量,也可将其看作是数组名,因 而可按下标法来使用。例如, 而可按下标法来使用。例如,pointer[i] pointer[i]等价于*(pointer+i) (pointer+i)。 注意:pointer+1 pointer+1指向数组的下一个 指向数组的下一个元素,而不是简单地使 元素,而不是简单地使 指针变量pointer pointer的值+1。其实际变化为 。其实际变化为pointer+1*size(size pointer+1*size(size为一 个元素占用的字节数)。 个元素占用的字节数)。 例如,假设指针变量 例如,假设指针变量pointer pointer的当前值为3000,则pointer+1 pointer+1 为3000+1*2=3002 3000+1*2=3002,而不是3001
案例4.5]使用指向数组的指针变量来引用数组元素。 /程序功能:使用指向数组的指针变量来引用数组元素*/ main f int array[10], *pointer=array,i; printf( Input 10 numbers for(i=0;1<10;i++ scanf("od, pointer+i;//使用指针变量来输入数组元素的值 printf( array[10] for(i=0;1<10;i++ printf((oad”,* ointer+i);,//使用指向数组的指针变量输出 数组 printf("n) 程序运行情况: put 10 numbers: 0123456789+- ary0:012345678 程序运行(15)
[案例4.5] 使用指向数组的指针变量来引用数组元素。 使用指向数组的指针变量来引用数组元素。 /*程序功能:使用指向数组的指针变量来引用数组元素 程序功能:使用指向数组的指针变量来引用数组元素 * / main() { int array[10], *pointer=array, i; array[10], *pointer=array, i; printf( printf(“Input 10 numbers: 10 numbers: ”); for(i=0; i<10; i++) for(i=0; i<10; i++) scanf( “%d ”, pointer+i); , pointer+i); //使用指针变量来输入数组元素的值 使用指针变量来输入数组元素的值 printf( printf(“array[10]: array[10]: ”); for(i=0; i<10; i++) for(i=0; i<10; i++) printf( printf(“%d ”, *(pointer+i pointer+i)); //使用指向数组的指针变量输出 使用指向数组的指针变量输出 数组 printf( printf(“ \ n ”); } 程序运行情况: 程序运行情况: Input 10 numbers: 0 1 2 3 4 5 6 7 8 9 Input 10 numbers: 0 1 2 3 4 5 6 7 8 9←┘ array[10]: 0 1 2 3 4 5 6 7 8 9 array[10]: 0 1 2 3 4 5 6 7 8 9 程序运行 (15 )
弗原創IT教育中心 程序说明: 程序中第3行和第6行的2个fo语句,等价于下面的程序段: for(i=0; 1<10; 1++, pointer++) scanf(%/od, pointer) printf array[10 pointer-array for(i=0; 1<10; 1++, pointer++ printf o pointer 思考题: (1)如果去掉" pointer--aray;,程序运行结果会如何? 请上机验证。 (2)在本案例中,也可以不使用来作循环控制变量,程 序怎么修改?提示:指针可以参与关系运算
程序说明: 程序中第3行和第6行的2个for语句,等价于下面的程序段: 语句,等价于下面的程序段: for(i=0; i<10; i++,pointer++) for(i=0; i<10; i++,pointer++) scanf(“%d”,pointer ,pointer); printf( printf(“array[10]: array[10]: ”); pointer=array; pointer=array; for(i=0; i<10; i++,pointer++) for(i=0; i<10; i++,pointer++) printf( printf(“%d”,*pointer); ,*pointer); 思考题: (1)如果去掉“pointer=array; pointer=array;”行,程序运行结果会如何? 行,程序运行结果会如何? 请上机验证。 (2)在本案例中,也可以不使用 )在本案例中,也可以不使用i来作循环控制变量,程 来作循环控制变量,程 序怎么修改?提示:指针可以参与关系运算。 序怎么修改?提示:指针可以参与关系运算