表达式形式数组下标 ·数组下标可以具有表达式形式: a[i+j*10]=0; 。数组下标表达式甚至可以有副作用: i=0; while (i<N) a[i++]=0; 11/41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 表达式形式数组下标 数组下标可以具有表达式形式: a[i+j*10] = 0; 数组下标表达式甚至可以有副作用: i = 0; while (i < N) a[i++] = 0; 11 / 41
下标表达式副作用的陷阱 ·数组下标表达式的副作用需要特别注意: i=0; while (i<N) a[i]=b[i++]; ·表达式a[i]=b[i++]试图在访问i的时候修改i,会 引起未定义行为 ●可以将递增操作移出下标以解决问题 for(i=0;1<N;i++) a[i]=b[i]; 12/41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 下标表达式副作用的陷阱 数组下标表达式的副作用需要特别注意: i = 0; while (i < N) a[i] = b[i++]; 表达式 a[i] = b[i++] 试图在访问 i 的时候修改 i, 会 引起未定义行为 可以将递增操作移出下标以解决问题 for (i = 0; i < N; i++) a[i] = b[i]; 12 / 41
示例一反转序列 ●反转输出用户输入的数值序列: Enter10 numbers:34824910279423115031 In reverse order:31501123947102498234 。思路:将输入存储在数组中,然后反向打印 1 /Reverses a series of numbers * 2 #include <stdio.h> 3 #define N 10 4 int main(void){ 5 int a[N],i; 6 printf("Enter %d numbers:"N); 7 for (i 0;i<N;i++) 8 scanf("%d",&a[i]); 9 printf("In reverse order:") 10 for(i=N·1;i>=0;--) 11 printf("%d",a[i]); 12 printf("In"); 13 return 0; 141 13/41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 示例 —— 反转序列 反转输出用户输入的数值序列: Enter 10 numbers: 34 82 49 102 7 94 23 11 50 31 In reverse order: 31 50 11 23 94 7 102 49 82 34 思路:将输入存储在数组中,然后反向打印 1 /∗ Reverses a series of numbers ∗/ 2 #include <stdio.h> 3 #define N 10 4 int main(void) { 5 int a[N], i; 6 printf("Enter %d numbers: ", N); 7 for (i = 0; i < N; i++) 8 scanf("%d", &a[i]); 9 printf(" In reverse order : "); 10 for (i = N - 1; i >= 0; i--) 11 printf(" %d", a[i]); 12 printf(" \n"); 13 return 0; 14 } 13 / 41
数组初始化(Array Initialization) ·像其它变量一样,数组也可以在声明时初始化 。最常见的初始化方式是将整型常量以逗号分隔,然后将整个 序列放置在花括号内,如下: nta[10]={1,2,3,4,5,6,7,8,9, 10}; ·如果初始化列表比数组长度短,剩余元素进行零初始化 inta[10]={1,2,3,4,5,6}; /initial value of a is {1,2,3,4,5, 6,0,0,0,0}*/ 14/41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数组初始化 (Array Initialization) 像其它变量一样,数组也可以在声明时初始化 最常见的初始化方式是将整型常量以逗号分隔,然后将整个 序列放置在花括号内,如下: int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 如果初始化列表比数组长度短,剩余元素进行零初始化 int a[10] = {1, 2, 3, 4, 5, 6}; / ∗ i n i t i a l value of a i s {1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 , 0 , 0} ∗ / 14 / 41