1.什么是数组?
相同类型变量的集合
数组是由一个一个成员组成,每个成员的数据类型都是相同的
2.数组的含义
数组就是用来存储一组相同类型的数据的
3.数组的定义
数据类型 数组名 [成员个数] ;
int arr [5] ;
char brr [20] ;
float crr [3] ;
1)数组的定义中数据类型->指的是数组的每个成员的类型
2)数组名的命名规则和变量的命名规则一致
3)成员个数->就是数组的成员个数
注意 : 成员个数必须是一个非负的整数
4.访问数组成员的方法
例子 : int arr[5];//定义了有5个int类型成员的数组arr
int *p = arr;
1)数组名 + 下标//在访问成员时下标从0开始计数
arr[0] arr[1] arr[2] arr[3] arr[4]
注意 : 没有arr[5]这个成员,如果强行使用arr[5]成员,
会造成数组越界
2)数组名 + 偏移量
*(arr+0) *(arr+1) *(arr+2) *(arr+3) *(arr+4)
3)指针 + 偏移量
*(p + 0) *(p + 1) *(p + 2) *(p + 3) *(p + 4)
4)指针 + 下标
p[0] p[1] p[2] p[3] p[4]
5.数组的特性
1)通过sizeof运算符查看数组特性
sizeof(数组名) = 整个数组的大小
sizeof(成员) = 一个成员的大小
sizeof(数组名) / sizeof(成员) = 成员个数
2)数组中成员的地址都是连续的
可以通过某个成员的地址进行地址偏移
找到其他成员的位置
3)一维数组的数组名表示的是数组首成员的地址
6.数组的初始化
数据类型 数组名 [成员个数] = {数值,数值};
int arr [3] = {0,1,2];
int arr [3] = {0};
//会把数组的所有成员初始化成0
int arr [3] = {11};
//会把首成员初始化成11,其他成员初始化成0
================================================
int arr [] = {11,22,33,44};
//会把后边数值的个数当作成员个数使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5];
arr[0] = 100;
arr[1] = 9527;
arr[2] = -1;
arr[3] = 123;
arr[4] = 10086;
printf("arr[0] = %d\n", arr[0]);
printf("arr[1] = %d\n", arr[1]);
printf("arr[2] = %d\n", arr[2]);
printf("arr[3] = %d\n", arr[3]);
printf("arr[4] = %d\n", arr[4]);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
//int arr[5];可以
//int arr[0];可以
//int arr[-1];不可以
//int arr[3.14];不可以
//int arr['A'];可以
int i = 5;
int arr[i];
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5];
int i = 0;
for(i = 0; i < 10; i++)
{
arr[i] = i * 10;
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5];
int i = 0;
for(i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
for(i = 0; i < 5; i++)
{
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5];
int i = 0;
printf("sizeof(arr[0]) = %ld\n", sizeof(arr[0]));
printf("sizeof(arr) = %ld\n", sizeof(arr));
/*for(i = 0; i < 5; i++)
{
printf("sizeof(arr[%d]) = %ld\n", i, sizeof(arr[i]));
}*/
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[10];
int i = 0;
for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
scanf("%d", &arr[i]);
}
for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i = 10;
int arr[5] = {i};
printf("arr[0] = %d\n", arr[0]);
printf("arr[1] = %d\n", arr[1]);
printf("arr[2] = %d\n", arr[2]);
printf("arr[3] = %d\n", arr[3]);
printf("arr[4] = %d\n", arr[4]);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i = 0;
int arr[5] = {0};
for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("arr[%d] = %p\n", i, &arr[i]);
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5] = {0};
printf("arr[0] = %p\n", &arr[0]);
//表示的是数组首成员的地址
printf("arr = %p\n", arr);
//表示的是数组首成员的地址
printf("&arr = %p\n", &arr);
//表示的是整个数组的地址
printf("===========================\n");
printf("arr[0] + 1 = %p\n", &arr[0] + 1);
printf("arr + 1 = %p\n", arr + 1);
printf("&arr + 1 = %p\n", &arr + 1);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5] = {11,22,33,44,55};
int i = 0;
for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
//printf("arr[%d] = %d\n", i, arr[i]);
printf("*(arr + %d) = %d\n", i, *(arr + i));
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5] = {11,22,33,44,55};
printf("arr = %p\n", arr);
arr += 1;
//arr++;
printf("arr = %p\n", arr);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5] = {11,22,33,44,55};
int i = 0;
int *p = arr;
//p = &arr[0];//把数组首成员的地址赋值给指针p
p = arr;//把数组首成员的地址赋值给指针p
for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
//printf("arr[%d] = %d\n", i, arr[i]);
//printf("*(arr + %d) = %d\n", i, *(arr + i));
//printf("*(p + %d) = %d\n", i, *(p + i));
//printf("p[%d] = %d\n", i, p[i]);
printf("%d[arr] = %d\n", i, i[arr]);
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[5] = {11,22,33,44,55};
int *p = arr;
/*
sizeof(arr) / sizeof(arr[0]) = 5
sizeof(arr) / sizeof(*arr) = 5
sizeof(p) / sizeof(*p) = 2
sizeof(p) / sizeof(p[0]) = 2
*/
return 0;
}
|