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. int ages[] = {, , , };
  41.  
  42. // 计算数组元素的个数
  43. int count = sizeof(ages)/sizeof(int);
  44.  
  45. for (int i = ; i<count; i++)
  46. {
  47. printf("ages[%d]=%d\n", i, ages[i]);
  48. }
  49.  
  50. return ;
  51. }
  52.  
  53. // 数组的基本使用
  54. void arrayUse()
  55. {
  56. // 数组的定义格式: 类型 数组名[元素个数];
  57. int ages[] = {, , , , };
  58. // 19 19 28 27 26]
  59. ages[] = ;
  60.  
  61. /*
  62. ages[0] = 19;
  63. ages[1] = 19;
  64. ages[2] = 28;
  65. ages[3] = 27;
  66. ages[4] = 26;
  67. */
  68.  
  69. /*
  70. 遍历:按顺序查看数组的每一个元素
  71. */
  72. for (int i = ; i<; i++)
  73. {
  74. printf("ages[%d]=%d\n", i, ages[i]);
  75. }
  76. }

数组的内存储存细节

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

数组和函数

  1. #include <stdio.h>
  2.  
  3. // 数组作为函数参数,可以省略元素个数
  4. // 数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
  5.  
  6. void change(int array[])
  7. {
  8. //printf("array==%p\n", array);
  9.  
  10. array[] = ;
  11. }
  12.  
  13. void change2(int n)
  14. {
  15. n = ;
  16. }
  17.  
  18. int main()
  19. {
  20. int ages[] = {, , , , , };
  21.  
  22. //printf("ages==%p\n", ages);
  23.  
  24. change(ages);
  25.  
  26. //change2(ages[0]);
  27.  
  28. printf("%d\n", ages[]);
  29. return ;
  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[];
  19.  
  20. // 2.遍历所有元素,找出最大值
  21. for (int i = ; i<length; i++)
  22. {
  23. // 如果当前元素大于max,就用当前元素覆盖max
  24. if (array[i] > max)
  25. {
  26. max = array[i];
  27. }
  28. }
  29.  
  30. return max;
  31. }
  32.  
  33. int main()
  34. {
  35. int ages[] = {, , , , , , , , };
  36.  
  37. int ages2[] = {, , , , , , , , };
  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 ;
  46. }

 

【学习笔记】【C语言】数组的更多相关文章

  1. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  2. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  3. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  4. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  5. RX学习笔记:JavaScript数组操作

    RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...

  6. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  7. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  8. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

  9. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  10. Fortran学习笔记:03 数组(Array)

    Fortran学习笔记目录 书接上回:Fortran学习笔记:02 流控制语句 数组(Array) 定义数组 一维数组 program main implicit none integer :: i ...

随机推荐

  1. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  2. WinForm特效:拦截窗体上各个部位的点击

    windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息. 以下示例演示了最简单的效果片断: 他会把客户区和标题栏的效果互换,比如无法按住 ...

  3. OSG 实现跟随节点的相机(转)

      本章教程将继续使用回调和节点路径(NodePath)来检索节点的世界坐标. 本章目标: 在一个典型的仿真过程中,用户可能需要从场景中的各种车辆和人物里选择一个进行跟随.本章将介绍一种将摄像机“依附 ...

  4. 简单方便统一封装的傻瓜式GET/POST库AliasNet正式公布~开源喽~

    在进行网页自动化时我们做得最多的工作就是不停的往某个URL GET/POST数据并得到相应的Response,通过分析Response的结果再进行下一步操作,通过网页自动化我们可以做很多工作,比如去某 ...

  5. oc-32-@property示例

    Goods.h #import <Foundation/Foundation.h> typedef struct{ int year; int month; int day; } MyDa ...

  6. systemtap-与 oracle 转

    https://baoz.net/using-systemtap/ http://nanxiao.me/category/%E6%8A%80%E6%9C%AF/systemtap-%E7%AC%94% ...

  7. 使用@media实现IE hack的方法

    文章简介:众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用“\0”,“\”和“\9”来仅让IE某些版本识别,而对于现代浏览器来说,他会直 ...

  8. php.ini的配置

    一.user_agent ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') user_agent,再 ...

  9. 关于设置ScrollView的滚动条为隐藏的方法

    要实现ScrollView滚动条的隐藏,有两种方法, 一种是在XML的ScrollView布局中加入属性android:scrollbars="none" 另一种则是在代码中获取S ...

  10. redis 简介

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...