🌹个人主页🌹:喜欢草莓熊的bear
🌹专栏🌹:C语言基础
目录
前言
一、数组
二、一维数组
2.1 一维数组的创建和初始化
数组创建
数组初始化
数组类型
2.2 一维数组的使用
数组下标
数组打印
数组输入
2.3 一维数组在内存中的储存
三、sizeof计算数组元素个数
四、二位数组
4.1 二维数组的概念
4.2 二维数组的创建
4.3 二维数组的初始化
不完全初始化
完全初始化
按照行初始化
初始化时省略行,但是不能省略列
4.5 二维数组的使用
4.6 二维数组的输入和输出
4.7 二维数组的储存
五、C99中的变长数组
六、二分查找
总结
前言
本期给大家介绍的数组主要内容包括:数组的一些概念、了解一维数组、二维数组。
一、数组
二、一维数组
2.1 一维数组的创建和初始化
数组创建
语法形式如下:
1 type arr_name[常量值];
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
int math[20];
char ch[8];
double score[10];
数组初始化
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
数组类型
int arr1[10];
int arr2[12];
char ch[5];
2.2 一维数组的使用
数组下标
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
在C语⾔中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符。
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n", arr[7]);//8
printf("%d\n", arr[3]);//4
return 0;
}
执行结果:
数组打印
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
输出的结果:
数组输入
明⽩了数组的访问,当然我们也根据需求,⾃⼰给数组输⼊想要的数据,如下:
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
2.3 一维数组在内存中的储存
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("&arr[%d] = %p\n ", i, &arr[i]);
}
return 0;
}
从输出的结果我们分析,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻
三、sizeof计算数组元素个数
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr));
return 0;
}
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr[0]));//计算⼀个元素的⼤⼩,单位是字节
return 0;
}
#include <stido.h>
int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
四、二位数组
4.1 二维数组的概念
4.2 二维数组的创建
type arr_name[常量值1][常量值2];
例如:
int arr[3][5];
double data[2][8];
4.3 二维数组的初始化
不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
按照行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
初始化时省略行,但是不能省略列
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
4.5 二维数组的使用
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
printf("%d\n", arr[2][4]);
return 0;
}
4.6 二维数组的输入和输出
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
int i = 0;//遍历⾏
//输⼊
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
scanf("%d", &arr[i][j]); //输⼊数据
}
}
//输出
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
4.7 二维数组的储存
#include <stdio.h>
int main()
{
int arr[3][5] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
了解清楚⼆维数组在内存中的布局,有利于我们后期使⽤指针来访问数组的学习。
五、C99中的变长数组
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};
int n = a+b;
int arr[n];
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);//根据输⼊数值确定数组的⼤⼩
int arr[n];
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
六、二分查找
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int key = 7;//要找的数字
int mid = 0;//记录中间元素的下标
int find = 0;
while(left<=right)
{
mid = (left+right)/2;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else
{
find = 1;
break;
}
}
if(1 == find )
printf("找到了,下标是%d\n", mid);
else
printf("找不到\n");
return 0;
}
mid = left+(right-left)/2;
总结
重点理解数组的储存是连续的,还有对二维数组的理解。自己实现一下二分查找!!