一维数组
一维数组的创建和初始化
数组是一组相同类型元素的集合。数组的创建方式:
typt_t arr_name [const_n]
//typt_t 是数组的元素类型
//const_n 是常量表达式,用来指定数组的大小
数组创建的实例:
int arr1[10];
int count=10;
int arr2[count];//错误
char arr3[10];
float arr4[10];
double arr5[10];
注意:数组创建,[ ]中要给一个常量,不能使用变量。
数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值 (初始化)。
#include<stdio.h>
#include <string.h>
int main()
{
int a = 10;//初始化
int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//完全初始化
int arr2[10] = { 1, 2, 3, 4, 5 };//不完全初始化
int arr3[] = { 1, 2, 3, 4, 5 };
int arr4[5] = { 1, 2, 3, 4, 5 };
char ch1[5] = { 'b', 'i', 't' };//b i t \0 \0
char ch2[] = { 'b', 'i', 't' };//b i t
char ch3[5] = "bit";//b i t \0 \0
char ch4[] = "bit";//b i t \0
char ch5[] = "bit";//b i t \0
char ch6[] = { 'b', 'i', 't' }; //b i t
printf("%d\n", strlen(ch5));//3
printf("%d\n", strlen(ch6));//随机值
return 0;
}
一维数组的使用
对于数组的使用我们之前介绍了一个操作符: [ ] ,下标引用操作符。它其实就数组访问的操作符。
#include<stdio.h>
int main()
{
int arr[10] = { 0 };//[] - 下标引用操作符
//计算数组的元素个数
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
一维数组在内存中的存储
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
}
return 0;
}
从中可以看出
- 一维数组在内存中是连续存放的。
- 随着数组下标的增长,地址是由低到高变化的。
二维数组
二位数组的创建和初始化
#include<stdio.h>
int main()
{
//创建
int arr[3][4];
char ch[3][10];
//初始化 - 创建的同时给赋值
int arr1[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int arr2[3][4] = { 1, 2, 3, 4, 5, 6, 7 };//不完全初始化 - 后面补0
int arr3[3][4] = { { 1, 2 }, { 3, 4 }, { 4, 5 } };
int arr4[][4] = { { 1, 2 }, { 3, 4 }, { 4, 5 } };
return 0;
}
二维数组的使用
#include<stdio.h>
int main()
{
int arr[3][4] = { { 1, 2 }, { 3, 4 }, { 4, 5 } };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
二维数组在内存中的存储
可见二维数组在内存中存放也是连续的!
一行内部连续,跨行也是连续的。
数组作为函数参数
数组名是数组首元素的地址
但是有2个例外
- sizeof(数组名) —— 数组名表示整个数组 ,计算的是整个数组的大小,单位是字节
- &数组名 —— 数组名表示整个数组 ,取出的是整个数组的地址