2018-09-16数组的细讲

数组顾名思义就是一堆数据组成的

  • 把具有相同数据类型的若干变量按有序的形式组织起来,
    以便于程序处理,这些数据元素的集合就是数组,按照数组元素的类型不同,可分为:数值数组、字符数组、指针数组
  • 数组的应用场景就是用来保存多个数据类型相同的变量

数组的优点:数组是将元素在内存中连续存储的;
因为数据是连续存储的,内存地址连续,所以在查找数据的时候效 率比较高;
缺点:在存储之前,我们需要申请一块连续的内存空间,并且在编译的时候就必须确定好它的空间的大小。在运行的时候空间的大小是无法随着你的需要进行增加和减少而改变的,当数据两比较大的时候,有可能会出现越界的情况,数据比较小的时候,又有可能会浪费掉内存空间。在改变数据个数时,增加、插入、删除数据效率比较低

  • 数组的定义 ==> 数据类型 数组名称 元素个数 例如:int arr[5];
    上面的意思是申请了一个整形类型的数组里面可以存放五个元素

数组的定义和初始化几种样子

  • int arr[3] = {4, 6, 9}; 指定元素个数,完全初始化
  • int arr[] = {4, 6, 9}; 不指定元素个数,完全初始化
  • int arr[5] = {1,2}; 指定元素个数,部分初始化
  • int arr[5] = {[4] = 3,[1] = 2}; 指定元素个数,部分初始化
  • int arr[] = {[4] = 3}; 不指定元素个数,部分初始化
  • int arr[3];先定义后初始化
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    如果定义了数组,但没有给数组内的元素赋值,那么数组中没有赋值的元素将存储的回事垃圾数据

数组的注意点:
使用数组时不能超出数组的索引范围使用, 索引从0开始, 到元素个数-1结束
使用数组时不要随意使用未初始化的元素, 有可能是一个随机值
对于数组来说, 只能在定义的同时初始化多个值, 不能先定义再初始化多个值

数组的调用

  • int arr[5] = {5,2,3,1,6};这五个数的索引分别是01234;
    假如我想要拿出元素2那么就 arr[1] 拿出元素6就是 arr[4]
  • 数组的遍历 int ages[4] = {19, 22, 33, 13};
    for (int i = 0; i < 4; i++) { printf("ages[%i] = %i\n", i, ages[i]); }
    计算数组的总长度:sizeof(数组名称)这是计算一个数组的总占量
    sizeof(数组名称[0])计算数组里面单个元素占用的量
    总占用量除以单个占用量就是这个数组的长度
    正序输出数组
    如果想倒着输出

数组在内存中的存储与分配空间

  • 1.内存寻址中,从高到低分配一块连续没有被使用的内存给数组
  • 2.从分配的连续存储空间中, 从地址小的位置开始给每个元素分配空间
  • 3.从每个元素分配的存储空间中, 地址最大的位置开始存储数据
  • 4.数组名指向的是内存地址最小的那块空间
  • 字符在内存中是以对应ASCII码值的二进制形式存储的,而非上述的形式。


数组的越界问题

数组越界导致的问题:
约错对象
程序崩溃

数组可以作为函数的参数使用,数组用作函数参数有两种形式:
一种是把数组元素作为实参使用
一种是把数组名作为函数的形参和实参使用

在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递"
实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元, 系统不再为形参数组分配存储单元
既然两个数组共享一段内存单元, 所以形参数组修改时,实参数组也同时被修改了


数组名作函数参数的注意点

  • 在函数形参表中,允许不给出形参数组的长度
  • 形参数组和实参数组的类型必须一致,否则将引起错误。
  • 当数组名作为函数参数时, 因为自动转换为了指针类型,所以在函数中无法动态计算除数组的元素个数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容