你的位置:首页 > 操作系统

[操作系统]【学习笔记】【C语言】数组


1. 什么是数组

数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的

2. 数组的特点

只能存放一种类型的数据,比如int类型的数组、float类型的数组

里面存放的数据称为“元素”

3. 定义

声明数组的类型

声明数组的元素个数(需要多少存储空间)

4. 格式

元素类型 数组名[元素个数];

比如:int ages[3];

5. 简单使用

简单初始化:int ages[5] = {19, 19, 20, 21, 25};

元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始

数组元素的访问:a[i]

6. 初始化

初始化方式

int a[3] = {10, 9, 6};

int a[3] = {10,9};

int a[] = {11, 7, 6};

int a[4] = {[1]=11,[0] = 7};

常见错误

int a[];

int[4] a;

int a[b];

a = {10, 11};

a[4] = {10,9,8,5};

7. 内存分析

数组存储空间的大小

存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)

数组名的作用,查看元素地址

数组越界的注意

8. 其他使用

数组与函数参数

数组元素作为函数参数

数组作为函数参数(sizeof注意)

遍历数组元素

两种方式遍历(while循环和for循环)

遍历元素值和元素地址

字符数组的使用

9.代码

 1 #include <stdio.h> 2  3 int main() 4 { 5   // 使用注意 6   // 都是正确写法 7   //int ages[5] = {10 , 11, 12, 67, 56}; 8   //int ages[5] = {10, 11}; 9   //int ages[5] = {[3] = 10, [4] = 11};10   //int ages[] = {10, 11, 14};11   12   // 错误写法13   // int ages[];14   15   // 错误写法16   /* 只能在定义数组的同时进行初始化17   int ages[5];18   ages = {10, 11, 12, 14};19   */20   21   // 正确写法22   // int ages['A'-50] = {10, 11, 12, 14, 16};23   //int size = sizeof(ages);24   //printf("%d\n", size);25   26   // 正确写法27   /*28   int count = 5;29   int ages[count];30   ages[0] = 10;31   ages[1] = 11;32   ages[2] = 18;33   */34   35   //printf();36   // 错误写法37   // 如果想再定义数组的同事进行初始化,数组元素个数必须是常量,或者不写38   //int ages[count] = {10, 11, 12};39   40   41   int ages[] = {10, 11, 12, 78};42   43   // 计算数组元素的个数44   int count = sizeof(ages)/sizeof(int);45   46   for (int i = 0; i<count; i++)47   {48     printf("ages[%d]=%d\n", i, ages[i]);49   }50   51   return 0;52 }53 54 // 数组的基本使用55 void arrayUse()56 {57   // 数组的定义格式: 类型 数组名[元素个数];58   int ages[5] = {19, 29, 28, 27, 26};59   // 19 19 28 27 26]60   ages[1] = 29;61   62   /*63    ages[0] = 19;64    ages[1] = 19;65    ages[2] = 28;66    ages[3] = 27;67    ages[4] = 26;68   */69   70   /*71    遍历:按顺序查看数组的每一个元素72   */73   for (int i = 0; i<5; i++)74   {75     printf("ages[%d]=%d\n", i, ages[i]);76   }77 }

数组的内存储存细节

 1 #include <stdio.h> 2  3 /* 4  提示用户输入5个学生的成绩,算出平均分并且输出 5 */ 6  7 int main() 8 { 9   10   11   // 1.定义一个数组来存储成绩12   int scores[5];13   14   // 2.提示输入成绩15   // 用来存储总分16   int sum = 0;17   for (int i = 0; i<5; i++) {18     // 2.1 提示输入某个学生的成绩19     printf("请输入第%d个学生的成绩:\n", i + 1);20     // 2.2 存储当前学生的成绩21     scanf("%d", &scores[i]);22     // 2.3 累加成绩23     sum += scores[i];24   }25   26   // 3.计算平均分,并且输出27   printf("平均分是%f\n", sum/5.0);28   return 0;29 }30 31 32 void test1()33 {34   // 1.定义一个数组来存储成绩35   int scores[5];36   37   // 2.提示输入成绩38   printf("请输入第1个学生的成绩:\n");39   scanf("%d", &scores[0]);40   41   printf("请输入第2个学生的成绩:\n");42   scanf("%d", &scores[1]);43   44   printf("请输入第3个学生的成绩:\n");45   scanf("%d", &scores[2]);46   47   printf("请输入第4个学生的成绩:\n");48   scanf("%d", &scores[3]);49   50   printf("请输入第5个学生的成绩:\n");51   scanf("%d", &scores[4]);52   53   // 3.计算平均分,并且输出54   int sum = 0;55   for (int i = 0 ; i<5; i++) {56     sum += scores[i];57   }58   printf("平均分是%f\n", sum/5.0);59 }60 61 void test()62 {63   /*64    char cs[5]= {'a', 'A', 'D', 'e', 'f'};65   66    printf("%p\n", cs);67   68    for (int i = 0; i<5; i++) {69    printf("cs[%d]的地址是:%p\n", i, &cs[i]);70    }*/71   72   int ages[3]= {10 , 19, 18};73   74   printf("%p\n", ages);75   76   for (int i = 0; i<3; i++) {77     printf("ages[%d]的地址是:%p\n", i, &ages[i]);78   }79 }

数组和函数

 1 #include <stdio.h> 2  3 // 数组作为函数参数,可以省略元素个数 4 // 数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组 5  6 void change(int array[]) 7 { 8   //printf("array==%p\n", array); 9   10   array[0] = 100;11 }12 13 void change2(int n)14 {15   n = 100;16 }17 18 int main()19 {20   int ages[6] = {10, 11, 10, 11, 10, 11};21   22   //printf("ages==%p\n", ages);23   24   change(ages);25   26   //change2(ages[0]);27   28   printf("%d\n", ages[0]);29   return 0;30 }

练习

 1 /* 2  3 设计一个函数,找出整型数组元素的最大值 4 */ 5  6 #include <stdio.h> 7  8 int maxOfArray(int array[], int length) 9 {10   // 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节11   12   //int size = sizeof(array);13   //printf("array=%d\n", size);14   15   //sizeof(array);16   17   // 1.定义一个变量存储最大值(默认就是首元素)18   int max = array[0];19   20   // 2.遍历所有元素,找出最大值21   for (int i = 1; i<length; i++)22   {23     // 如果当前元素大于max,就用当前元素覆盖max24     if (array[i] > max)25     {26       max = array[i];27     }28   }29   30   return max;31 }32 33 int main()34 {35   int ages[] = {11, 90, 67, 150, 78, 60, 70, 89, 100};36   37   int ages2[] = {11, 90, 67, 150, 78, 60, 70, 89, 100};38   39   //int size = sizeof(ages);40   41   //printf("ages=%d\n", size);42   int max = maxOfArray(ages, sizeof(ages)/sizeof(int));43   44   printf("%d\n", max);45   return 0;46 }