一、一维数组

数组:表示同类数据的集合(业务功能一致且数据类型一样)

[]:

  • ​ 定义时,表示数组身份与标志,其中数值表示数组元素的总个数
  • ​ 定义以外使用时,表示下标运算,下标运算有两个操作符:指针类型和类整形(int、 short int、 char等)

下标运算的计算法则:

type ary[M] = ...;
int n = ...; ary[n] address is:
(int)ary + sizeof(type)*n

C语言规定只能逐个引用数组元素,而不能一次引用整个数组

数组的引用名是第0个元素的地址常量

二、二维数组

  • 多维数组是特殊的一维数组
  • 数组的引用名是第0个元素的地址常量
  • 多维数组取得基本数据元素需要做多次下标运算
  • 内存是线性的,是一维的,没有二维啥事

下标运算的计算规则:

type ary[M][N] = ...;
int x, y =...; // ary[x][y] 两次下标运算
ary[x] address is:
(int)ary + sizeof(type[N] * x) // 得到一维数组
ar[x][y] address is:
(int)ary[x] + sizeof(type) * y
(int)ary + sizeof(type[N]) * x + sizeof(type) * y
推导:
(int)ary + sizeof(type) * N * x + sizeof(type) * y (DEBUG版)
(int)ary + sizeof(type) * (N*x + y) (Release版)

三、数组传参

  • 传的是数组首地址
  • 形参int ary[8]中8可不写
  • 形参需要间接访问才能影响实参的值,有三个运算符会触发间接访问:[]、*、->。所以关键看形参是否用到了间接访问,不看形参类型(指针,数组等)

四、字符

  1. C语言的字符来源于电报
  2. \r表示回车,回到行头。\n表示换行,不会回到行头。微软用 \n包含了回车和换行,别的操作系统就不一定,所以为了兼容,使用\r\n

五、字符数组和字符串(数组)

  • 字符构成的数组是字符数组,字符串(数组)是一种特殊的字符数组,具有编码信息。
  • 字符串分为两个流派:C stylePascal style
    • Pascal style:首先描述数据有多大,然后后面紧跟着数据,没有结束符。不定长字符串的存储访问速率高
    • C style:开始就是数据,有特定的结束符(约好的)。更利于实时传输,不定长字符串的存储访问速率低

  • 微软的字符串,首先描述数据有多大,然后紧跟着数据,最后还有结束符,兼容两者
  • 只要涉及到地址赋值与转换就会触发C语言的强类型检测
  • __mbscpy:多字节cpy,带中文strcpy会默认使用此cpy
  • unicode输出带有中文字符串时使用wprintf不会打印出来或打印不正确,需要使用setlocale(LC_ALL,"chs")获取对应地区的unicode编码

六、附加知识

  • 加减乘除取模等数学类运算以及位运算得到的结果都是常量,不能被赋值
  • 32位系统:任何变量地址都是模4的地址,为了快速寻址
  • 安利书:计算机程序设计艺术,其作者为了出书花费十年写的Tex(排版软件)

C-06\数组的更多相关文章

  1. Go的100天之旅-06数组和Slice

    目录 数组 Slice 数组 Go的数组和其它语言基本上一样,是长度固定的特定类型元素组成的序列,这基本上是所有语言数组的特性.和其它语言相比差异主要在声明和初始化的写法上,下面是简单声明一个数组: ...

  2. Java知识系统回顾整理01基础06数组03排序

    一.选择法排序 选择法排序的思路: 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个 ...

  3. Java知识系统回顾整理01基础06数组02初始化数组

    一.分配空间与赋值分步进行 分配空间与赋值分步进行 public class HelloWorld { public static void main(String[] args) { int[] a ...

  4. Java知识系统回顾整理01基础06数组01创建数组

    一.数组定义 定义:数组是一个固定长度的,包含了相同类型数据的 容器 二.声明数组 int[] a; 声明了一个数组变量. []表示该变量是一个数组 int 表示数组里的每一个元素都是一个整数 a 是 ...

  5. Java知识系统回顾整理01基础06数组07数组工具类Arrays

    一.Arrays简介 Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能. 大大提高了开发人员的工作效率. 二.Arrays提供的数组复制方法 与使用System.arraycopy ...

  6. Java知识系统回顾整理01基础06数组06二维数组

    一.一维数组和二维数组 这是一个一维数组, 里面的每一个元素,都是一个基本类型int int a[] =new int[]{1,2,3,4,5}; 这是一个二维数组,里面的每一个元素,都是一个一维数组 ...

  7. Java知识系统回顾整理01基础06数组05复制数组

    数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少 一.复制数组 把一个数组的值,复制到另一个数组中 System.arraycopy(src, srcPos, dest, de ...

  8. Java知识系统回顾整理01基础06数组04增强型for循环

    增强型for循环在遍历一个数组的时候会更加快捷 一.增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class HelloWorld { public st ...

  9. Java基础四(switch、数组、)

    1.流程控制语句switch2.数组3.随机点名器案例 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. ...

  10. 04_Java基础语法_第4天(数组)_讲义

    今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪 ...

随机推荐

  1. 版本控制工具Git介绍-01

    使用版本控制工具是为了方便团队开发,比如多人共同维护一个项目的时候,用版本控制工具可以很方便的维护项目代码,如果哪天你改了一个版本,出问题了,我们也可以很快的找到你改了什么,这里介绍使用比较多的版本控 ...

  2. 微信小程序的学习(一)

    一.小程序简介 1.小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API不同 小程序无法调用浏览器中的DOM和BOM的API 但是小程序可以调用微信环境提供 ...

  3. Go语言核心36讲30

    你好,我是郝林,今天我继续分享条件变量sync.Cond的内容.我们紧接着上一篇的内容进行知识扩展. 问题 1:条件变量的Wait方法做了什么? 在了解了条件变量的使用方式之后,你可能会有这么几个疑问 ...

  4. 第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 5.4 接口开发-根据id删除附件 5.4.1 接口文档 5.4.2 代码实现 5.4.3 接口测试 5.4.4 测试ALI和FAST_DFS以及MINIO上传和删除的接口 5.4.4.1 阿里 ...

  5. linux ip命令

    ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down # 关闭网卡 ip link set eth0 pro ...

  6. C++初阶(vector容器+模拟实现)

    迭代器 四种迭代器 容器类名::iterator 迭代器名;//正向迭代器 容器类名::const_iterator 迭代器名;//常量正向迭代器,const修饰,只能用于读取容器内的元素,不能改变其 ...

  7. java环境改完版本后无效

    把C盘program files和X86两个文件夹中的Common Files中的Oracle文件夹删掉 这是jdk安装时自动生成的两个文件夹,记录了jdk的版本和路径,即使你的jdk安装路径不在C盘 ...

  8. js-day02-综合案例ATM存款书写

     <script>                 // 1. 不断的弹出对话框         // 3. 金额的变量         let money = 100         w ...

  9. 【Java SE进阶】Day12 函数式接口、函数式编程(Lambda表达式)

    一.函数式接口介绍 1.概念 仅有一个抽象方法的接口 适用于函数式编程(Lambda使用的接口) 语法糖:方便但原理不变,如for-each是Iterator的语法糖 Lambda≈匿名内部类的语法糖 ...

  10. 【每日一题】【递归实现、自下而上、优化】-2022年1月12日-NC68 跳台阶

    描述一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果). 数据范围:0 \leq n \leq 400≤n≤40要求:时间复杂度: ...