文章目录
之前一直也没注意怎么写博客想着就是自己的笔记,最近总看大佬的博客着实感到羞愧不已,以后就算几个月写一篇文章都行就是不水文章。
🦚1.一维数组的创建和初始化
数组是一组相同类型元素的集合。数组的创建方式:
type_tarr_name[const_n];
//type_t是指数组的元素类型
//const_n是一个常量表达式,用来指定数组的大小
那么在程序中语法怎么实现呢?
int arr[8];
char ch[3];
//下面是整形数组
int arr2[] = {
0, 1, 2, 3 };//等同于下面写法,如果不在[]中写数字默认最大为后面个数
int arr3[4] = {
0, 1, 2 ,3};
//下面字符数组
char ch1[5] = {
'j', 'j','y' };//数组中元素为 'j', 'j','y' ,'\0','\0'
char ch2[] = {
'j', 'j','y' };//数组中元素为 'j', 'j','y'
char ch3[5] = "jjy";//数组中元素为 'j', 'j','y','\0','\0'
char ch4[] = "jjy";//数组中元素为 'j', 'j','y','\0'
printf("%d\n" , strlen(ch2));//打印出 随机值
printf("%d\n" , strlen(ch4));//打印出 3
注意写法不同结果不一样 char ch2[] = { ‘j’, ‘j’,‘y’ }; 这种写法后面元素是随机的
注意下面这种写法是不被允许的
int n = 8;
int arr[n]; //[]中插入的必须是常量 但是c99以上的编译器支持
数组初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)
int arr4[4] = {
0, 1, 2, 3};//完全初始化
int arr5[4] = {
0, 1, 2 };//不完全初始化
🦚2.一维数组的使用
对于数组的使用我们之前介绍了一个操作符:[ ],下标引用操作符。它其实就数组访问的操作符
//该代码实现输出数组中全部数
int arr[10] = {
0 };
arr[3] = 3;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //sizeof(arr)整个数组大小本题中4*10 sizeof(arr[0])其中一个数组大小本题中为4
for (i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
//该代码实现输出数组中全部数
int arr[10] = {
1,2,3,4,5,6,7,8,9,10};
int* p = arr;//数组名是数组首元素的地址
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", *p);
p++;
}
总结
数组元素下标默认从0开始
数组元素可以通过计算得到
🦚3.一维数组在内存中的存储
int arr[10] = {
0 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
}
由此得出结论
1.一维数组在内存中是连续存放的!
2.随着数组下标的增长,地址是由低到高变化的!
🦚4.二维数组的创建和初始化
二维数组的创建
int arr[3][4];
char arr1[3][4];
double arr2[3][4];
二维数组的初始化
//初始化
int arr[3][4] = {
1,2,3,4,5,6,7,8,9,10.11,12};
int arr1[3][4] = {
1,2,4,5,6,7,8 };
int arr2[3][4] = {
{
1,2}, {
3,4},{
5,6} };
int arr3[][4] = {
{
1.2}, {
3,4},{
5,6} };//根据一行中有多少元素来决定的,对于本代码等同于arr2[3][4]
如下是二维数组在内存中的排列
注意下面有 错误写法
int arr4[3][]= {
{
1.2}, {
3,4},{
5,6} };//第二个数组位置不写不可以
int arr5[][] = {
{
1.2}, {
3,4},{
5,6} };//这种写法不可以
🦚5.二维数组的使用
二维数组可以通过下标来获取么?
下图是二维数组的对应数组下标
arr[行号][列号]
以下代码遍历二维数组
int arr4[3][4] = {
{
1,2}, {
3,4} , {
5,6} };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", arr4[i][j]);
}
printf("\n");
}
🦚6.二维数组在内存中的存储
二维数组在内存中也是连续存放的
一行内部连续,跨行也是内部连续
二维数组实际上内存中是这样的
证明二维数组是连续的:
int arr4[3][4] = {
{
1,2}, {
3,4} , {
5,6} };
int* p = &arr4[0][0];
int i = 0;
for (i = 0; i < 12; i