数组的概念

数组是一组具有相同数据类型的变量集合,这里要注意两点,数组只能存储相同的数据类型和数组的内存是连续的,这位数组和指针的联系奠定了基础。

一维数组

定义及初始化

一维数组指的是只有一个下标的数组,它用来表示一组具有相同类型的数据

其格式为

  1. 类型说明符 数组名[常量表达式];

e.g.

  1. int arr[3];

上式表达的是定义了一个一维数组,其数据类型是int,arr是数组名称,3表示的是数组长度。其包含的为arr[0]arr[1]arr[2],没有arr[3],使用arr[3]会造成数组越界错误

数组的初始化有三种方式:

  • 直接对数组按位数初始化
  1. int arr[3] = {1, 2, 3};
  • 初始化部分元素,此时剩余元素默认设置为0
  1. int arr[3] = {1, 2};
  • 不指定数组长度,此时长度会自动按照元素个数赋值
  1. int arr[] = {1, 2, 3};

一维数组的使用

要使用数组元素,就需要使用符合数组使用规则的使用方式,数组使用格式如下:

  1. 数组名[下标]

注:在数组中,下标是以0开始的

  • 一维数组的遍历

    数组中的一个常见操作就是对数组进行遍历
  1. int arr[3] = { 1, 2, 3};
  2. int i = 0;
  3. for (i = 0; i < 3; i++)
  4. {
  5. printf("arr[%d] = %d\n", i, arr[i]);
  6. }
  • 获取一维数组的最值

    最值得获取也是一维数组的常见操作

    假设第一个值是最大值,然后依次和后面的值对比,通过不断替换从而得到最大值
  1. int arr[5] = {1, 6, 7, 2, 5};
  2. int max = arrx[0];
  3. int i = 0;
  4. for (i = 1; i < 5; i++)
  5. {
  6. if (arr[i] > max)
  7. {
  8. max = x[i];
  9. }
  10. }
  11. printf("max = %d\n", max);
  • 一维数组的排序

    一维数组有一个很重要的应用就是排序,排序中有两个排序比较重要,面试什么的最喜欢的。一个是冒泡排序,一个是选择排序。

    • 冒泡排序原理

    1. 从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮的比较。
    2. 除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置。
    3. 依次类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止
  1. int x[5] = { 9, 8, 3, 5, 2 };
  2. int m = 0, n = 0;
  3. int temp = 0;
  4. int i = 0;
  5. printf("冒泡排序前:\n");
  6. for (i = 0; i < 5; i++)
  7. {
  8. printf("%d ", x[i]);
  9. }
  10. printf("\n");
  11. for (m = 0; m < 5 - 1; m++)
  12. {
  13. for (n = 0; n < 5 - 1 - m; n++)
  14. {
  15. if (x[n] > x[n + 1])
  16. {
  17. temp = x[n];
  18. x[n] = x[n + 1];
  19. x[n + 1] = temp;
  20. }
  21. }
  22. }
  23. printf("冒泡排序后:\n");
  24. for (i = 0; i < 5; i++)
  25. {
  26. printf("%d ", x[i]);
  27. }
  28. printf("\n");

二维数组

定义及初始化

二维数组可以看作一维数组的每个元素又是一个一维数组,其格式为:

  1. 类型说明符 数组名[常量表达式1][常量表达式2];

e.g.:

  1. int arr[2][3];

二维数组的初始化:

  • 按行赋值
  1. int arr[2][3] = {{1, 2 ,3}, {4, 5, 6}};
  • 综合赋值
  1. int arr[2][3] = {1, 2, 3, 4, 5, 6};
  • 部分赋值
  1. int arr[2][3] = {{1},{1, 2, 3}};

注:对数组赋值时,二维数组的第一个下标可以省略,而第二个下标不可省略!

arr <=> *arr <=> &arr <=> &arr[0][0] <=> array[0]

在二维数组中。arr[0]代表的是一个数组名,是一个右值。

arr + 1arr[0] + 1代表的意义不同

二维数组的使用

二维数组的使用规则与一维数组类似,其格式为

  1. 数组名[下标][下标];
  • 二维数组的遍历
  1. int arr[3][4] = { {1,2,3,4 }, {5,6,7,8}, {9,10,11,12} };
  2. for (int i = 0; i < 3; i++) //循环遍历行
  3. {
  4. for (int j = 0; j < 4; j++) //循环遍历列
  5. {
  6. printf("arr[%d][%d] = %d \t", i, j, arr[i][j]);
  7. }
  8. printf("\n");//每一行的末尾添加换行符
  9. }

C学习笔记-数组的更多相关文章

  1. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  2. JavaScript学习笔记-数组

    数组 数组中的每个元素的位置是索引,索引是基于32位的由0开始的数值,最大索引为(2的32次方-2),最大长度为(2的32次方-3) 数组是无类型的:元素可为任意类型:动态的:可根据需要自动增长.缩减 ...

  3. JavaScript学习笔记——数组

    javascript数组数组是一个可以存储 一组 或是 一系列 相关数据 的 容器. 一.为什么要使用数组. (1)为了解决大量相关数据的存储和使用的问题. (2)模拟真是的世界. 二.如何创建数组 ...

  4. JavaScript学习笔记-数组(1)

    数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型.数 ...

  5. Java菜鸟学习笔记--数组篇(二):数组实例&args实例

    基本类型实例 //1.定义一个一维数组,先声明,在分配空间 int []number;//生命,没有初始化,number=null number=new int[5];//初始化为默认值,int默认值 ...

  6. js学习笔记——数组方法

    join() 把数组中所有元素转化为字符串并连接起来,并返回该字符串, var arr=[1,2,3]; var str=arr.join("#"); //str="1# ...

  7. JS学习笔记-数组

    ECMAScript中没有提供类和接口等的定义,但它却是一门面向对象的语言,由于它能够通过其它 方式实现类似高级语言的面向对象功能,这些内容将在后面的文章中进行一步步的总结.此篇仅对JS中对象作简要说 ...

  8. PHP学习笔记-数组(1)

    1-1 数组定义 1.什么是数组? 所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组 ...

  9. php 学习笔记 数组3

    15.使用数组 1).并集(union)  array_merge(array1,array2,array3..) 函数把两个或多个数组合并为一个数组,后面覆盖前面 2). 交集(intersecti ...

  10. php 学习笔记 数组2

    10.切割数组 array_slice(array, offset, length);返回一个由原始数组中的连续元素组成的新数组,参数1为原始数组,参数2为要复制的起始位置, 参数3要复制的个数:新数 ...

随机推荐

  1. Java8-Stream-No.08

    import java.util.Arrays; import java.util.stream.IntStream; import java.util.stream.Stream; public c ...

  2. 题解 [AT2134] Zigzag MST

    题面 解析 我们先考虑一下加一条边(x,y,z)会成什么亚子: (还有很多边不画了...) 然后我们把这个图单独拿出来: 我们可以发现,对于最小生成树的贡献, 它是等价于下面这张图的(因为连通性一样) ...

  3. 立即执行函数与For. . .in语句

    ㈠立即执行函数 ⑴定义:在函数定义完,立即被调用,这样的函数叫做立即执行函数 ⑵语法:函数对象() ⑶注意:立即执行函数往往只会执行一次 ⑷示例1: (function(){ alert(" ...

  4. Java进阶知识12 Hibernate多对多双向关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.应用场景(Student-Teacher):当学生知道有哪些老师教,老师也知道自己教哪些学生时,可用双向关联 1.2.创建Teacher类和Student类 ...

  5. [NOI2017]蚯蚓排队

    嘟嘟嘟 现在看来这道题还不是特别难. 别一看到字符串就想SAM 看到\(k\)很小,所以我们可以搞一个单次修改复杂度跟\(k\)有关的算法. 能想到,每一次断开或链接,最多只会影响\(k ^ 2\)个 ...

  6. 【luoguP3243】[HNOI2015]菜肴制作--拓扑排序

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  7. pyqt5的简单进度条程序

    # -*- coding: utf-8 -*- # @Author : FELIX # @Date : 2018/5/17 16:43 from PyQt5.QtCore import QBasicT ...

  8. mov 与 lea 区别

    转自:https://blog.csdn.net/fengyuanye/article/details/85715565 https://my.oschina.net/guonaihong/blog/ ...

  9. JavaWeb_(Mybatis框架)使用Mybatis对表进行增、删、改、查操作_二

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  10. Java学习回顾总结

    java-01初识Java见上一篇 Java-02 1.命名规范与规范: 标识符命名规则:首字母为字母|下划线|$ 其余部分数字|字母|下划线|$ 命名规范: 变量属性方法命名规范:第一个单词首字母小 ...