1 #include<stdio.h>
2 #define N 3
3 int main(){
4
5 int a[N]={1,2,3};//若用 const int 定义N,报错。 数组不能用可变长度的参数初始化
6 int i;
7
8
9
10 printf("通过数组名和下标直接访问数组元素:\n");
11 for(i=0;i<N;i++)
12 printf("%d:%d\n",&a[i],a[i]);//&a[i] a+i都表示地址
13
14 printf("通过地址间接访问数组元素\n");
15 for(i=0;i<N;i++)
16 printf("%d:%d\n",a+i,*(a+i));//*(a+i) a[i]都表示a[i]
17
18 return 0;
19 }
![]()
1 #include<stdio.h>
2 #define LINE 2
3 #define COL 3
4
5 int main(){
6 int a[LINE][COL]={1,2,3,4,5,6};
7 int i,j;
8
9 printf("通过数组名和下标直接访问数组元素:\n");
10 for(i=0;i<LINE;i++)
11 for(j=0;j<COL;j++)
12 printf("%d:%d\n",&a[i][j],a[i][j]);
13
14 printf("通过地址间接访问数组元素:\n");
15 for(i=0;i<LINE;i++)
16 for(j=0;j<COL;j++)
17 printf("%d:%d\n",a[i]+j,*(a[i]+j));
18
19 printf("二维地址中a+i表示的地址:\n");
20 for(i=0;i<LINE;i++)
21 printf("a+%d:%d\n",i,a+i);//COL为3 所以 +1就表示往后推3个
22
23 return 0;
24 }
![]()
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define N 3
4
5 int main(){
6 int a[N];
7 int *p,i;
8
9
10 for(p=a;p<a+N;p++)//p=a就是p=&a[0]指向首地址
11 scanf("%d",p);// p指向a[2]
12
13
14 for(p=a;p<a+N;p++)
15 printf("%d",*p);//同上
16 printf("\n");
17
18
19 p=a;
20
21 for(i=0;i<N;i++)
22 scanf("%d",p+i);//同上
23
24 for(i=0;i<N;i++)
25 printf("%d",*(p+i));//同上
26 printf("\n");
27
28
29
30 return 0;
31 }
![]()
1 #include<stdio.h>
2
3 int main(){
4 int a[2][3]={1,2,3,4,5,6};
5 int i,j;
6 int *p;
7 int (*q)[3];//存放含有3个元素的一维数组的地址
8
9 for(p=&a[0][0];p<&a[0][0]+6;p++)//注意a[0]+6这种表示方式
10 printf("%d",*p);
11 printf("\n");
12
13 for(q=a;q<a+2;q++)//行+1
14 for(j=0;j<3;j++)//列+1
15 printf("%d",*(*q+j));// *q类似a[0],列+1
16 printf("\n");
17
18 return 0;
19 }
20 /*
21 1.&a[0][0]等价于a[0],a[0]+6也可以改成&a[0][0]+6
22 2.此数组的地址;直接访问该数组元素
23 4.A.B.C.F.G可表示a[1][2]的地址的:
24
25 &a[1][2];a[0]+5;p+5;&a[0][0]+1*3+2;a[0]+1*3+2;
26
27 int a[2][3];
28 int (*p)[3];
29 int *p;
30
31 p=a[0];
32 q=a;
33
34 */
![]()
1 #include <stdio.h>
2 #define N 5
3
4
5 int binarySearch(int x[], int n, int item); // 函数声明
6
7 int main() {
8
9 int a[N]={2,7,19,45,66};
10 int i,index, key;
11
12 printf("数组a中的数据:\n");
13 for(i=0;i<N;i++)
14 printf("%d ",a[i]);
15 printf("\n");
16
17
18 printf("输入待查找的数据项: ");
19 scanf("%d", &key);
20
21 index=binarySearch(a,5,key);//数组可以用a可以a[N]但是a[]不行
22
23 if(index>=0)
24 printf("%d在数组中,下标为%d\n", key, index);
25 else
26 printf("%d不在数组中\n", key); return 0; }
27
28
29
30 int binarySearch(int x[], int n, int item) {
31 int low, high, mid;
32
33 low = 0;
34 high = n-1;
35
36
37 while(low <= high) {
38 mid = (low+high)/2;
39
40
41
42 if (item==mid)
43 return mid;
44 else if(item<mid)
45 high = mid - 1;
46 else
47 low = mid + 1;
48 }
49 return -1;
50
51 }
![]()
1 #include <stdio.h>
2 #define N 5
3
4 void selectSort(int [], int);
5 // 函数声明(函数声明中可以省略变量名、数组名,但是数 组名后面的[]不是能少)
6
7
8 void input(int [], int);
9 void output(int [], int);
10
11
12
13 int main() {
14
15
16 int a[N];
17 printf("输入%d个整数\n", N);
18
19 input(a, N);
20 printf("排序前的数据:\n");
21
22 output(a,N);
23 selectSort(a,N);
24 // 调 用 selectSort()对数组a中的 N个元素排序
25
26 printf("排序后的数据:\n");
27 output(a, N);
28
29 return 0;
30 }
31
32
33 void input(int a[], int n) {
34
35 int i;
36 for(i=0; i<n; i++)
37 scanf("%d", &a[i]);
38 }
39
40 void selectSort(int a[], int n)
41 {
42
43 int i, j, k, temp;
44 for(i=0; i<n-1; i++) {
45 k = i; // k用于记录当前最小元素的下标
46 for(j=i+1; j<n; j++)
47 if (a[j] < a[k])
48 k = j; // 如果a[j]比当前最小元素还要小,就更新k,确保它总是存放最小 元素的下标
49
50 if(k != i) { // 找到最小元素后,交换a[i]和a[k]
51 temp = a[i];
52 a[i] = a[k];
53 a[k] = temp;
54 }
55 }
56 }
57
58 void output(int a[], int n)
59 {
60 int i;
61 for(i=0; i<n; i++)
62 printf("%d ", a[i]);
63 printf("\n");
64 }
![]()
1 #include<stdio.h>
2 #define N 5
3 void selectSort(char str[][20], int n ); // 函数声明,形参str是二维数组名
4
5 int main() {
6 char name[][20] = {"Bob", "Bill", "Joseph", "Taylor", "George"};
7 int i;
8
9 printf("输出初始名单:\n");
10 for(i=0; i<N; i++)
11 printf("%s\n", name[i]);
12
13 selectSort(name, N); // 调用选择法对name数组中的字符串排序
14
15 printf("按字典序输出名单:\n");
16
17 for(i=0; i<N; i++)
18 printf("%s\n", name[i]);
19
20 return 0;
21 }
22
23
24
25
26 void selectSort(char str[][20], int n) {
27
28 int i,j,k;
29 char name6[20];//char name 仅仅是一个字符 ,这里需要字符串
30 }
31
32 for(i=0;i<n-1;i++){
33 k=i;
34
35 for(j=i+1;j<n;j++)
36 if(strcmp(str[j],str[k])<0)
37 k=j;
38
39 if(k!=i){
40 strcpy(name6,str[i]);
41 strcpy(str[i],str[k]);
42 strcpy(str[k],name6) ;
43
44
45 }
46
47 }
![]()