数组部分(一)
数组用来代表内存里一组连续的同类型存储区,这些存储区叫做数组的元素。
数组、函数、指针、结构体,动态内存分配为重点内容
1.数组声明(一维数组)
1.1 声明数组时除了提供类型名称,数组名称之外还需要提供一个整数用来表示数组里的存储区个数。
int arr[5];
1.2 数组里存储区个数不能改变(声明的时候包含多少个存储区就只能永远包含这么多个存储区)。
int arr[10];//只能有10个元素
1.3 数组通常不会作为整体使用,一般一次只使用其中的某个存储区。
1.4 数组里每个存储区都有一个编号,这个编号叫做数组的下标。
int arr[5];
printf("%d\n",arr[3]);
1.5 有效下标的范围从0开始到存储区个数减一为止(超过范围的下标不可以使用)。
int arr[5];//5个元素,从0~4。
**注:**数组下标所能达到的最大值永远是数组元素个数-1
1.6 数组名称加下标可以表示数组里的存储区。
arr[0]表示数组下标为0的存储区
1.7 可以编写for循环依次处理数组里的所有存储区,循环变量代表数组的所有有效下标数组应该进行初始化,初始化数组的时候需要把初始化数据写在一对大括号中间,相邻数字之间用逗号分开。
1.8 如果初始化数据个数比存储区个数多就省略后面的初始化数据。如果初始化数据个数比存储区个数少就把后面的存储区内容初始化为0。如果初始化数据个数和存储区个数一样就可以省略数组声明里的存储区个数。
/*初始化个数不够时*/
arr[5] = {1,2};//数组中的元素为{1,2,0,0,0}
/*初始化个数超出时*/
arr[5] = {1,2,3,4,5,6}//数组中的元素为{1,2,3,4,5}
/*初始化时省略存储区个数*/
arr[] = {0,1,2,3,4} == arr[5] = {0,1,2,3,4}//初始化多少个,存储区就有多少个
1.9 数组名称不能代表存储区,所以不能被赋值。
arr = 4;//错误!
1.10 数组名称可以代表数组里第一个存储区的地址。
假设有如下数组
int arr[5];
0 1 2 3 4 下标
arr **** **** **** **** ****
^
*
*
arr
2.演示代码(一维数组)
2.1 数组存储区个数演示,循环赋值演示
/*
* 数组演示
* */
#include <stdio.h>
int main() {
int num = 0;
//int arr[5] = {0, 1, 2, 3, 4}; //数组里包含5个连续的整数类型存储区
//int arr[5] = {0, 1, 2, 3, 4, 5, 6};
//int arr[5] = {0, 1, 2};
int arr[] = {0, 1, 2, 3, 4};
//arr[2] = 10;
/*for (num = 0;num <= 4;num++) {
arr[num] = num;
}*/
for (num = 4;num >= 0;num--) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}
2.2 数组名作为存储区演示
/*
* 数组演示
* */
#include <stdio.h>
int main() {
int arr[] = {0, 1, 2, 3, 4};
printf("arr是%p\n", arr);
printf("&arr[0]是%p\n", &arr[0]);
printf("sizeof(arr)是%d\n", sizeof(arr));
return 0;
}
3.练习(一维数组)
3.1 在1~36中,随机产生7个互不重复的数字,并把它们输出到屏幕上
/*
* 数组练习
* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int arr[7] = {0}, num = 0, tmp = 0, cnt = 0;
srand(time(0));
/*for (num = 0;num <= 6;num++) {
arr[num] = rand() % 36 + 1;
}*/
do {
//每次循环产生一个随机数
//但是不保证数字一定能
//使用
tmp = rand() % 36 + 1;
//用数组里前cnt个数字依次
//和新数字做对比
for (num = 0;num <= cnt - 1;num++) {
if (tmp == arr[num]) { //新数字和某个旧数字一样
break;
}
}
if (num == cnt) { //for循环正常结束,新数字能使用的情况
arr[cnt] = tmp; //把新数字放到数组里
cnt++; //数组里的数字个数加一
}
} while (cnt < 7); //数字个数小于7
for (num = 0;num <= 6;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}