C-06\数组
一、一维数组
数组:表示同类数据的集合(业务功能一致且数据类型一样)
[]:
- 定义时,表示数组身份与标志,其中数值表示数组元素的总个数
- 定义以外使用时,表示下标运算,下标运算有两个操作符:指针类型和类整形(
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可不写 - 形参需要间接访问才能影响实参的值,有三个运算符会触发间接访问:
[]、*、->。所以关键看形参是否用到了间接访问,不看形参类型(指针,数组等)
四、字符
- C语言的字符来源于电报
\r表示回车,回到行头。\n表示换行,不会回到行头。微软用\n包含了回车和换行,别的操作系统就不一定,所以为了兼容,使用\r\n
五、字符数组和字符串(数组)
- 字符构成的数组是字符数组,字符串(数组)是一种特殊的字符数组,具有编码信息。
- 字符串分为两个流派:
C style和Pascal style- Pascal style:首先描述数据有多大,然后后面紧跟着数据,没有结束符。不定长字符串的存储访问速率高
- C style:开始就是数据,有特定的结束符(约好的)。更利于实时传输,不定长字符串的存储访问速率低

- 微软的字符串,首先描述数据有多大,然后紧跟着数据,最后还有结束符,兼容两者
- 只要涉及到地址赋值与转换就会触发C语言的强类型检测
__mbscpy:多字节cpy,带中文strcpy会默认使用此cpyunicode输出带有中文字符串时使用wprintf不会打印出来或打印不正确,需要使用setlocale(LC_ALL,"chs")获取对应地区的unicode编码
六、附加知识
- 加减乘除取模等数学类运算以及位运算得到的结果都是常量,不能被赋值
- 32位系统:任何变量地址都是模4的地址,为了快速寻址
- 安利书:计算机程序设计艺术,其作者为了出书花费十年写的Tex(排版软件)
C-06\数组的更多相关文章
- Go的100天之旅-06数组和Slice
目录 数组 Slice 数组 Go的数组和其它语言基本上一样,是长度固定的特定类型元素组成的序列,这基本上是所有语言数组的特性.和其它语言相比差异主要在声明和初始化的写法上,下面是简单声明一个数组: ...
- Java知识系统回顾整理01基础06数组03排序
一.选择法排序 选择法排序的思路: 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个 ...
- Java知识系统回顾整理01基础06数组02初始化数组
一.分配空间与赋值分步进行 分配空间与赋值分步进行 public class HelloWorld { public static void main(String[] args) { int[] a ...
- Java知识系统回顾整理01基础06数组01创建数组
一.数组定义 定义:数组是一个固定长度的,包含了相同类型数据的 容器 二.声明数组 int[] a; 声明了一个数组变量. []表示该变量是一个数组 int 表示数组里的每一个元素都是一个整数 a 是 ...
- Java知识系统回顾整理01基础06数组07数组工具类Arrays
一.Arrays简介 Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能. 大大提高了开发人员的工作效率. 二.Arrays提供的数组复制方法 与使用System.arraycopy ...
- Java知识系统回顾整理01基础06数组06二维数组
一.一维数组和二维数组 这是一个一维数组, 里面的每一个元素,都是一个基本类型int int a[] =new int[]{1,2,3,4,5}; 这是一个二维数组,里面的每一个元素,都是一个一维数组 ...
- Java知识系统回顾整理01基础06数组05复制数组
数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少 一.复制数组 把一个数组的值,复制到另一个数组中 System.arraycopy(src, srcPos, dest, de ...
- Java知识系统回顾整理01基础06数组04增强型for循环
增强型for循环在遍历一个数组的时候会更加快捷 一.增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class HelloWorld { public st ...
- Java基础四(switch、数组、)
1.流程控制语句switch2.数组3.随机点名器案例 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. ...
- 04_Java基础语法_第4天(数组)_讲义
今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪 ...
随机推荐
- Go语言核心36讲29
在上篇文章中,我们主要说的是互斥锁,今天我和你来聊一聊条件变量(conditional variable). 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论.实际上, ...
- 核磁共振成像学习笔记——从FID信号到K空间
在理想磁场环境下(没有不存在场不均匀性),对于一个没有梯度场的方块. 此时,RF pulse的两路正交信号(相位差为90°)对此方块进行激发,然后收取信号,我们可以得到由此方块产生的FID信号. 设此 ...
- 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述
目标检测20年综述(2019) 摘要 Abstract 该综述涵盖了400篇目标检测文章,时间跨度将近四分之一世纪.包括目标检测历史上的里程碑检测器.数据集.衡量指标.基本搭建模块.加速技术,最近的s ...
- 24V转5V,24V转3.3V稳压芯片的电路图,,PCB和BOM
1,PW6206与PW6513系列是一款高精度,40V高输入电压,低静态电流,低压降线性稳压器具有高纹波抑制.在VOUT=5V&VIN=7V时,负载电流高达300mA,(输入与输出电压的压差越 ...
- 彻底理解Python中的闭包和装饰器(上)
什么是闭包 闭包(Closure)其实并不是Python独有的特性,很多语言都有对闭包的支持.(当然,因为Python是笔者除C/C++之外学习的第二门语言,所以也是第一次遇到闭包.)简而言之,闭包实 ...
- .NET周报【12月第1期 2022-12-08】
国内文章 CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了? https://www.cnblogs.com/savorboard/p/cap-7-0.html) 今天,我们很高兴宣布 CAP ...
- 互斥锁 线程理论 GIL全局解释器锁 死锁现象 信号量 event事件 进程池与线程池 协程实现并发
目录 互斥锁 multiprocessing Lock类 锁的种类 线程理论 进程和线程对比 开线程的两种方式(类似进程) 方式1 使用Thread()创建线程对象 方式2 重写Thread类run方 ...
- AStar寻路算法示例
概述 AStar算法是一种图形搜索算法,常用于寻路.他是以广度优先搜索为基础,集Dijkstra算法和最佳优先(best fit)于一身的一种算法. 示例1:4向 示例2:8向 思路 递归的通过估值函 ...
- ClickHouse数据副本引擎
我的gitee地址:https://gitee.com/ddxygq/bigdata-technical-pai ,相关文章都放到这个仓库里了. 只有 MergeTree 系列里的表可支持副本: Re ...
- 网络编程 UDP套接字
第十二章 UDP套接字 12.1 前言 上一章讲述了TCP通信方式,它是基于流的面向连接的网络通信.UDP是IP协议上的另一种传输协议. TCP和UDP都是端到端的通信协议,都处于TCP/IP网络模型 ...