1、概述
数组是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的
2、一维数组
定义和使用
- 数组名字符合标识符的书写规定(数字、字母、下划线)
- 数组名不能与其他变量名相同,同一作用域内是唯一的
- 定义数组时 [ ]内最好是常量,使用数组时[ ]内既可以是常量,也可以是变量
- 方括号 [ ] 中的常量表达式表示数组元素的个数
例如:int a[3]; 表示数组a有三个元素,
其下标从0开始计算,因此3个元素分别为a[]、a[1]、a[2]
初始化
在定义数组的同时进行赋值叫做初始化
全局数组若不初始化,编译器将会默认赋值为0
局部数组若不初始化,内容是随机值
int a[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组a,同时初始化所有的成员变量
int a[10] = {1,2,3};//定义一个数组a,初始化前面三个成员变量,后面其他的变量为0
int a[10] = {0};//定义一个数组a,所有的成员变量都为0
// []中不定义元素个数,定义时必须初始化
int a[] = {1,2,3,4,5};//定义了一个数组a,里面包含5个成员变量
数组名
数组名是一个地址的常量,代表着数组中的第一个元素的地址
例如有一个数组a[10];其中a == &a[0]表达式为true
#include <stdio.h>
int main()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//定义一个数组,同时初始化所有成员变量
printf("a = %p\n", a);
printf("&a[0] = %p\n", &a[0]);
int n = sizeof(a); //数组占用内存的大小,10个int类型,10 * 4 = 40
int n0 = sizeof(a[0]);//数组第0个元素占用内存大小,第0个元素为int,4
int i = 0;
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
3、一维数组练习强化
求一维数组的最值
定义一个一维数组,将他的最大值/最小值找到并输出
#include <stdio.h>
int main(){
int a[] = {10,5,45,36,2,7,8,95,9,-10};//定义一个一维数组,并同时初始化它所有的成员变量
int i = 0;
int max = a[0];
//sizeof(a),求出整个数组在内存中所占空间字节的大小
//sizeof(a[0]),求出一个元素在内存中所占空间字节的大小
//sizeof(a) / sizeof(a[0]),就可以求出数组的元素个数
for (i = 1;i < sizeof(a) / sizeof(a[0]);i++){
if (a[i] > max){
max = a[i];
}
}
printf("数组中的最大值为:%d\n",max);
return 0;
}
一维数组的逆置
方法一:
#include <stdio.h>
int main() {
int a[] = { 1,2,3,4,5,6,7,8,9,10,11};//定义一个数组a,并初始化它所有的元素
int i = 0;
int temp;
for (i = 0; i < sizeof(a) / sizeof(a[0]) / 2; i++) {
temp = a[i];
a[i] = a[sizeof(a) / sizeof(a[0]) - 1 - i];
a[sizeof(a) / sizeof(a[0]) - 1 - i] = temp;
}
for (int j = 0; j < sizeof(a) / sizeof(a[0]); j++) {
printf("%d\t", a[j]);
}
return 0;
}
方法二:
#include <stdio.h>
int main() {
int a[] = { 1,2,3,4,5,6,7,8,9,10,11};//定义一个数组a,并初始化它所有的元素
int i = 0;
int j = sizeof(a) / sizeof(a[0]) - 1;
int temp;
while (i < j){
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
for (int k = 0; k < sizeof(a) / sizeof(a[0]); k++) {
printf("%d\t", a[k]);
}
return 0;
}
冒泡排序
#include <stdio.h>
int main(){
int a[] = {10,5,6,3,8,9,4,7,1,2}; //定义一个数组,初始化所有的元素
int len = sizeof(a) / sizeof(a[0]); //数组长度
int i = 0;
int j = 0;
int temp;
//外层循环
for (i = 0; i < len - 1;i++){
//内层循环目的是比较两个相邻的数,将较大的放到后面
for (j = 0;j < len - 1 - i;j++){
if (a[j] > a[j + 1]){//交换
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int k = 0;k < len;k++){
printf("%d\t",a[k]);
}
return 0;
}