zoukankan      html  css  js  c++  java
  • 数组字符串(篇六)

    一、数组
    1.概念
    把具有相同类型的若干变量,按有序的方式组织起来,这些按序排列的同类数据元素
    的集合称为数组。

    线性存储结构,在内存中按顺序存储

    2.一维数组
    (1)定义
    一维数组同其他变量一样,使用前必须定义

    类型说明符 数组名称[size];
    类型说明符:int,char, float,double…
    数组名称:标识符,驼蜂命名法
    数组名时数组唯一标识
    size:常量表达式,表示数组元素的个数,也成为数组的长度。size 为 0 的数组没有意义

    //定义一个大小为 5 的数组,其中每个数组元素都是 int 类型
    int arr[5];
    arr:数组名称
    5:数组大小即数组元素的个数
    int:数组元素的类型

    double dArr[5];

    (2)数组说明注意
    数组的类型实际是数组元素的类型。对于同一个数组来说,其所有元素的数据类型都是相同的
    数组名不能与其他变量同名
    数组下表是从 0 开始,最大下表为:size - 1
    []:中不能使用变量来表示数组元素的个数

    数组在定义时,其大小必须明确!!!

    数组元素是按下表依次存储在存储单元中
    因此数组占据的内存空间大小 = 数组长度 * 数组元素的类型长度

    (3)数组的初始化
    //全部初始化
    int arr[5] = {1,2,3,4,5};
    //部分初始化,其他元素默认为该类型的 0 值
    int arr[5] = {1,2,3};
    int arr[5] = {[2] = 8, [3] = 9}; //OK,

    //省略大小的定义方法
    int arr[] = {1,2,3,4}; //OK, 不建议
    int arr[]; //Error

    //变量初始化 && 数组初始化
    int tmp = 0;

    int tmp;
    tmp = 0;

    int buf[3] = {1,2,4};

    int buf[3];
    buf[3] = {1,2,3}; //Error
    buf = {1,2,3}; //Error

    数组初始化,必须在定义的同时初始化!

    int n = 6;
    int arr[n]; //Error

    int arr[5] = {1,2,3,4,5};
    int buf[5];

    buf = arr; //Error, 数组名表示地址

    (4)数组元素的访问
    int buf[5] = {1,2,3,4,5};
    buf[0] —> 数组第一个元素
    buf[2] —> 数组第三个元素
    buf[4] —> 数组第五个元素
    buf[5] —> 数组第六个元素 //超出数组超度,越界访问,不可以,未知错误

    宏定义数组大小:
    #define LEN 5
    int arr[LEN] = {1,2,3,4,5};

    (5)数组相关地址问题
    int arr[5] = {1,2,3,4,5};

    区分以下三个地址代表何种意义:
    arr:数组名,代表整个数组,同时表示数组首元素的地址
    &arr:数组的地址
    &arr[0]:数组首元素的地址

    //分析以下地址偏移量,来确定每个地址的意义
    &arr[0] = 0x7ffe17c68cf0
    &arr[1] = 0x7ffe17c68cf4
    &arr[2] = 0x7ffe17c68cf8
    &arr[3] = 0x7ffe17c68cfc
    &arr[4] = 0x7ffe17c68d00

    &arr[0] = 0x7ffe17c68cf0
    &arr[0]+1 = 0x7ffe17c68cf4
    arr = 0x7ffe17c68cf0
    arr + 1 = 0x7ffe17c68cf4
    &arr = 0x7ffe17c68cf0
    &arr + 1 = 0x7ffe17c68d04

    (6)数组性质:
    数据类型一致
    大小固定
    数组元素在内存中连续分布

    (7)数组大小问题:
    类型说明符 数组名称[size];

    int arr[5];
    数组大小为:
    5 * sizeof(arr[0]);
    5 * sizeof(int);
    sizeof(arr); //整个数组大小

    (8)数组元素排序 — 冒泡排序
    int arr[5] = {11, 45, 2, 66, 34};

    从小到大进行排序,最大值放在最后

    第一轮:
    arr[0] arr[1] —> arr[1] (45)
    arr[1] arr[2] —> arr[2] (45)
    arr[2] arr[3] —> arr[3] (66)
    arr[3] arr[4] —> arr[4] (66)

    	结果: 11, 2, 45, 34, 66
    

    第二轮:
    arr[0] arr[1] —> arr[1] (11)
    arr[1] arr[2] —> arr[2] (45)
    arr[2] arr[3] —> arr[3] (45)

    	结果:2, 11, 34, 45, 66
    

    第三轮:
    arr[0] arr[1] —> arr[1] (11)
    arr[1] arr[2] —> arr[2] (34)

    	结果: 2, 11, 34, 45, 66
    

    第四轮:
    arr[0] arr[1] —> arr[1] (11)

    	结果:2, 11, 34, 45, 66
    
    参加数据个数           比较次数
    	   5                      4
    	   4                      3
    	   3                      2
    	   2                      1
    

    因此:
    外层循环控制比较的轮数:LEN - 1
    内存循环控制比较元素的个数:

    千里之行,始于足下!
  • 相关阅读:
    iOS实现微信外部H5支付完成后返回原APP(多APP也可实现)
    微信开发,仿原生实现 “再按一次返回”功能
    centos 环境变量配置
    centos 6.* 配置端口
    linux 中 svn 服务器搭建 重启
    删除apache注册表
    Linux 编译安装 php 扩展包 curl
    手机APP中使用history.back()返回没有效果的解决
    Centos 6.5升级安装Git
    linux 已有目录挂载磁盘
  • 原文地址:https://www.cnblogs.com/MINAIot/p/13041015.html
Copyright © 2011-2022 走看看