本章重点
- 一维数组的创建和初始化
- 一维数组的使用
- 一维数组在内存中的存储
- 二维数组的创建和初始化
- 二维数组的使用
- 二维数组在内存中的存储
- 数组作为函数参数
一维数组的创建和初始化
数组的创建
type_t arr_name [const_n];
注:数组创建,[ ]中要给一个常量才可以,不能使用变量。
int main() {
int arr[10] = { 1,2,3 };
char arr4[] = "abcdef";
printf("%d\n",sizeof(arr4));
printf("%d\n",strlen(arr4));
return 0;
}
- strlen和sizeof没有什么关联
- strlen 是求字符串长度的-只能针对字符串求长度 - 库函数 - 使用得引头文件
- sizeof 计算变量、数组、类型的大小 - 单位是字节 - 操作符
int main() {
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
printf("%d\n",sizeof(arr1));
printf("%d\n",sizeof(arr2));
printf("%d\n",strlen(arr1));
printf("%d\n",strlen(arr2));
return 0;
}
一维数组的使用
对于数组的使用我们之前介绍了一个操作符:[ ] ,下标引用操作符。它其实就数组访问的操作符。我们来看代码:
int main() {
char arr[] = "abcdef";
int sz = sizeof(arr) / sizeof(arr[0]) - 1;
for (int i = 0; i <= sz; i++) {
printf("%c ",arr[i]);
}
return 0;
}
总结: 1.数组是使用下标来访问的,下标是从0开始。 2.数组的大小可以通过计算得到。
int arr[10];
int sz = sizeof(arr) / sizeof(arr[0]);
一维数组在内存中的存储
接下来我们探讨数组在内存中的存储。看代码:
int main() {
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++) {
printf("&arr[%d] = %p\n",i,&arr[i]);
}
return 0;
}
仔细观察输出结果,我们发现,随着数组下标的增长,元素的地址也在有规律的递增。由此可以得出:数组在内存中是连续存放的。
二维数组的创建和初始化
int arr[3][4];
char arr[3][5];
二维数组的初始化
int main() {
int arr[3][4] = {1,2,3,4};
int arr1[3][4] = { {1,2},{4,5} };
int arr2[][4] = { {2,3},{4,5} };
return 0;
}
二维数组的使用
int main() {
int arr[3][4] = { {1,2,3},{4,5} };
int i = 0;
for (i = 0; i < 3; i++) {
int j = 0;
for (j = 0; j < 4; j++) {
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
二维数组在内存中的存储
int main() {
int arr[3][4] = { {1,2,3},{4,5} };
int i = 0;
for (i = 0; i < 3; i++) {
int j = 0;
for (j = 0; j < 4; j++) {
printf("&arr[%d][%d] = %p\n",i,j, &arr[i][j]);
}
}
return 0;
}
通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。
数组作为函数参数
往往我们在写代码时,会将数组作为参数传给函数。 比如:实现一个冒泡排序
void bubble_sort(int arr[], int sz) {
int i = 0;
for (i = 0; i < sz - 1; i++) {
int flag = 1;
int j = 0;
for (j = 0; j < sz - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int tem = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tem;
flag = 0;
}
}
if (flag == 1) {
break;
}
}
}
int main() {
int arr[] = {9,8,7,6,5,4,3,2,1,0};
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n",sz);
bubble_sort(arr,sz);
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d ",arr[i]);
}
return 0;
}
补充
1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。 2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
除了1,2两种情况之外,所有的数组名都表示数组首元素的地址。
|