006-配列
25533 ワード
はいれつ
配列の旧名は、データのセットです.
int a[10];//10個の整数を格納できます
char c[8];//8文字を格納できます
一般フォーマット:配列タイプ配列名[要素個数];
配列要素へのアクセス:下付き、a[2],a[0],a[4];//下付き文字は0から始まります
次に例を示します
2 D配列および多次元配列
2ビット配列は特殊な1次元配列です.要素は1次元配列です.
2つの配列は1つのテーブルに相当し、行と列があります.
int a[3][2];//2行3列、下図のように
a[0][0] a[0][1]a[1][0] a[1][2]a[2][0] a[2][2]
下付きもゼロから始まり、配列名は配列のアドレス、すなわち最初の要素のアドレスa[0][0]である
3つの一次元配列:a[0],a[1],a[2]と理解できる.
ここでa[0]はa[0][0]、a[0][1]を含み、
a[1]はa[1][0]、a[1][1]を含み、
a[2]はa[2][0]、a[2][1]を含む
2 D配列の例
文字列
「hello」//これは文字列で、複数の文字からなり、文字0で終わり、0文字は表示されません.
文字列出力には%sを使用します.
文字列の長さ:strlen関数は文字の長さを取得します.0文字は含まれません.
配列の旧名は、データのセットです.
int a[10];//10個の整数を格納できます
char c[8];//8文字を格納できます
一般フォーマット:配列タイプ配列名[要素個数];
配列要素へのアクセス:下付き、a[2],a[0],a[4];//下付き文字は0から始まります
次に例を示します
1 #include<stdio.h>
2
3
4
5 //
6 void show(int a[],int n);
7 //
8 void reverseArray(int a[],int n);
9 //
10 int returnMax(int a[],int n );
11 //
12 int returnSum(int a[],int n);
13 int main()
14 {
15 int a[3];//
16 int nArray[] = {0,1,2,3,4,5,6,7,8,9};//
17
18 printf("%lu
",sizeof(a));// = *
19
20 //
21 a[0] = 11;
22 a[1] = 22;
23 a[2] = 33;
24
25 // ,
26 int arrayLenght = sizeof(nArray)/sizeof(int);
27 int i = 0;
28 while( i ++ < arrayLenght)//while
29 {
30 printf("%d ",nArray[i]);
31 }
32 printf("
");
33 show(a,3);
34 reverseArray(a,3);
35 printf("max :%d
",returnMax(a,3));
36 printf("sum:%d
",returnSum(a,3));
37
38 return 0;
39 }
40 // , ,int a[10] int *a;
41 void show(int a[],int n)//a ,n
42 {
43 // sizeof, , ,
44 // sizeof on array function parameter will return sizeof 'int *' instead of 'int []'
45 //printf(" :%lu
",sizeof(a));// = *
46 for (int i = 0; i < n; i ++)//for
47 {
48 printf("%d ",a[i]);
49 }
50 printf("
");
51 }
52
53 //
54 void reverseArray(int a[],int n)
55 {
56 while (n-- > 0 ) {
57 printf("%d ",a[n]);
58 }
59 printf("
");
60 }
61
62 //
63 int returnMax(int a[],int n )
64 {
65 int max = 0;
66 for (int i = 0; i < n; i ++)//for
67 {
68 if (max < a[i])
69 {
70 max = a[i];//
71 }
72 }
73 return max;
74 }
75 //
76 int returnSum(int a[],int n)
77 {
78 int sum = 0;
79 for (int i = 0; i < n; i ++)//for
80 {
81 sum += a[i];//
82 }
83 return sum;
84 }
2 D配列および多次元配列
2ビット配列は特殊な1次元配列です.要素は1次元配列です.
2つの配列は1つのテーブルに相当し、行と列があります.
int a[3][2];//2行3列、下図のように
a[0][0] a[0][1]a[1][0] a[1][2]a[2][0] a[2][2]
下付きもゼロから始まり、配列名は配列のアドレス、すなわち最初の要素のアドレスa[0][0]である
3つの一次元配列:a[0],a[1],a[2]と理解できる.
ここでa[0]はa[0][0]、a[0][1]を含み、
a[1]はa[1][0]、a[1][1]を含み、
a[2]はa[2][0]、a[2][1]を含む
2 D配列の例
1 #include <stdio.h>
2
3 //
4
5 void show(int a[][2],int h,int l);
6 int main()
7 {
8
9 //
10 int a[3][2];
11 //for
12 for (int i= 0; i < 3; i++)
13 {
14 for (int j = 0; j< 2; j ++)
15 {
16 a[i][j] = i+j;
17 }
18 }
19 printf("length: %lu
",sizeof(a));
20 // ,
21 printf("
a[0]: %p
",&a[0]);
22 printf("a[1]: %p
",&a[1]);
23 printf("a[2]: %p
",&a[2]);
24 show(a,3,2);
25
26 return 0;
27 }
28
29 void show(int a[][2],int h,int l)
30 {
31 // ,int (*)[2];
32 //sizeof on array function parameter will return size of 'int (*)[2]' instead of 'int [3][2]'
33 // printf("%lu
",sizeof(a));
34
35 // ,
36 for (int i= 0; i < h; i++)
37 {
38 for (int j = 0; j< l; j ++)
39 {
40 printf("%p\t",&a[i][j]);// ,
41 //printf("%d ",a[i][j]);
42 }
43 printf("
");
44
45 }
46 printf("
");
47
48 }
文字列
「hello」//これは文字列で、複数の文字からなり、文字0で終わり、0文字は表示されません.
文字列出力には%sを使用します.
文字列の長さ:strlen関数は文字の長さを取得します.0文字は含まれません.
1 #include <stdio.h>
2 #include <string.h>//strlen
3
4 // c, , 1
5 char containC(char str[],int n);
6
7 //
8 int main()
9 {
10 char c1[] = "jkhasdjkfhnkcdfdf";// \0
11 char c2[] = {'1','2','3','\0'};// , \0
12 printf("%s\t %s
",c1,c2);
13 printf("%lu\t %lu
",strlen(c1),sizeof(c1));//strlen , \0
14
15 printf("%c
",containC(c1,strlen(c1)));
16
17 return 0;
18 }
19
20 // c, , 1
21 char containC(char str[],int n)
22 {
23 //
24 for (int i = 0; i < n ; i ++)
25 {
26 if (str[i] == 'c')
27 {
28 return '1';// 1
29 }
30 }
31 return '0';// 0
32 }