数组的概念:
数组是一组相同类型元素的集合
数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。
一维数组的创建和初始化:
type arr_name[常量值];
存放在数组中的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组元素类型。
type指数组中存放的数据类型:char short int float等,也可以自定义。
arr_name:数组名字 [常量值]:数组大小
int math[20]; float score[8] char ch[2];
2.1数组的初始化--一般使用大括号,将数据放入大括号中
int num1[5] = { 1,2,3,4,5 };
int num2[5] = { 1,2,3 };
int num3[ ] = {1,2,3};-----3个元素
int num4[] = { 1,2,3,4,5,6 };//错误初始化---初始化项太多
2.2数组的类型
数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组的类型。
如下:
int arr1[10];
int arr2[12];
char ch[8];
arr1数组类型是:int [10]; arr2数组类型是:int [12] ch数组类型是:char [8]
一维数组的使用:
3.1数组下标:c语言规定数组是有下标的,从0开始。
假设数组有n个元素,最后一个元素的下标是n-1. []:下标引用操作符
int main() {
int num1[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d", num1[6]); //7
return 0;
}
3.3数组的输入:
3.4数组的存储:
(1)数组在内存中存储是连续存储。
(2)随着下标的增长,地址是由小到大变化的。
size of计算数组元素个数:
size of:计算类型或变量大小的。-------返回值是size_t类型
size_t是无符号整型
printf("%d\n",sizeof(int));-----printf("%zd\n",sizeof(int));
printf(sizeof(10));
以后创建一个数组大小就是 int sz=sizeof(arr)/sizeof(arr[0]);
二维数组的创建:
如果把一维数组作为数组的元素,就是二维数组。二维数组作为数组元素的被称为三维数组。
5.1 二维数组的定义:type arr_name[常量值1][常量值2]^(行 列 )^;
例:
int arr[3][5];
double data[2][8];
解释:3表示数组有3行 5表示每一行有5个元素 int表示数组的每个元素都是整型类型
5.2 二维数组的初始化:
5.2.1 不完全初始化
int arr1[3][5]={1,2};
int arr2[3][5]={0};
5.2.2 完全初始化
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,7}};
二维数组在初始化的时候,可以省略行,不能省略列。
int arr5[][5]={1,2,3};
5.3 二维数组的使用
二维数组行是从0开始的,列也是从0开始的。
5.4二维数组的访问:
5.5二维数组的输入输出:
#define _CRT_SECURE_NO_WARNINGS 1
#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]);
}
printf("\n");
}
//输出
for (i = 0; i < 3; i++) {
int j = 0;
for (j = 0; j < 5; j++) {
printf("%d", arr[i][j]);
}
printf("\n");
}
return 0;
}
5.6二维数组在内存中的存储:
for (i = 0; i < 3; i++) {
int j = 0;
for (j = 0; j < 5; j++) {
printf("&arr[%d][%d]=%p\n",i,j, &arr[i][j]);
}
printf("\n");
}
二维数组在内存中也是连续存储的
c99中,引入了变长数组的概念。
int arr[10];
int arr[5+3];
int arr[3]={1,2,3};
vs中虽然支持了变长数组的语法,但是不是全部支持的。
变长数组是不支持vs的。 变长数组是不能初始化的。
int n=0;
scanf("%d\n",&n);
int arr[n];
例题:例1:多个字符从两端移动,向中间汇聚。
welcome to you!!!
w******************!
we****************!!
wel***************!!!
…
welcome to you!!!
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main() {
char arr1[] = "welcome to you!!!!";
char arr2[] = "******************";
int left = 0;
int right = strlen(arr1) - 1;
while (left<=right) {
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
return 0;
}
备注:
**Sleep();**叫休眠函数 ms 1000ms=1s
system 用来执行系统命令的
cls 清除窗口