一、一维数组

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

[]:

  • ​ 定义时,表示数组身份与标志,其中数值表示数组元素的总个数
  • ​ 定义以外使用时,表示下标运算,下标运算有两个操作符:指针类型和类整形(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. MessagePack 和System.Text.Json 序列号 反序列化对比

    本博客将测试MessagePack 和System.Text.Json 序列号 反序列化性能 项目文件: Program.cs代码: using BenchmarkDotNet.Running; us ...

  2. 面试 考察网络请求HTTP相关知识(第六天!)

    01.HTTP 常⻅的状态码有哪些? 1xx 服务器收到请求 2xx 请求成功         ---   200 成功状态码 3xx 重定向            ---  301永久重定向,浏览器 ...

  3. phpmyadmin 数据库导出数据到excel(图文版)

    查询到想要的数据后,点击上方或下方的"导出"按钮 格式选择"CSV for MS Excel" 如果快速导出的数据乱码,可以选择"导出方式" ...

  4. 前端项目通过‘URL 重写’部署在 IIS 中,访问 WebAPI 接口

    〇.前言 在前端项目开发时,我们可以通过配置代理 proxy 来访问本地或者是远程接口,但是部署后代理就失效了.如果项目部署在 IIS 上,就没法去对应到指定接口,此时就需要 IIS 中的'URL重写 ...

  5. 一文讲透CabloyJS全栈框架的来龙去脉

    本文受众 咱们做软件开发,就好比是建造一幢幢房屋,一座座桥梁,既可以是北方宫殿的巍峨,也可以有南方庭院的雅致,更可以是横跨群山的峻险与孤悬.那么,不同的语言.不同的框架也都由其内在的秉质吸引着一批粉丝 ...

  6. 递归与Stream流转换

    目录 递归与Stream流转换 list转为类中一个属性为key,类实例为value的Map list单独取出对象中一个属性成为集合/数组 步骤:--在此只写service层代码 递归与Stream流 ...

  7. node学习01

    1.前言 Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核). 这使得 N ...

  8. Kubernetes专栏 | 安装部署(一)

    --随着云原生概念的普及,许多企业的业务纷纷上云,为了追求可靠性,稳定性,和弹性伸缩,提升资源利用率等需求.Kubernetes这个谷歌开源的容器编排平台已日益流行,被大家熟知和使用. 通常来说,Ku ...

  9. python安装包出现的两个问题error: Unable to find vcvarsall.bat、提示No module named Crypto.Cipher

    python安装包出现的两个问题 error: Unable to find vcvarsall.bat No module named Crypto.Cipher error: Unable to ...

  10. 把盏言欢,款款而谈,ChatGPT结合钉钉机器人(outgoing回调)打造人工智能群聊/单聊场景,基于Python3.10

    就像黑火药时代里突然诞生的核弹一样,OpenAI的ChatGPT语言模型的横空出世,是人工智能技术发展史上的一个重要里程碑.这是一款无与伦比.超凡绝伦的模型,能够进行自然语言推理和对话,并且具有出色的 ...