171104—数组开张【一维数组&指针数组】

前言:断断续续地往前走,总算进入数组了。。

楔子:回忆我们在学习函数的时候发现Cpp有一个很人性化的设计是你可以通过一个语句定义一个“函数类型”,然后就可以以此很方便地定义许多函数,另外一个有相同效果的是你可以将一个函数名定义成很多不同类型的函数,因为它们都需要做同样的事情。今天,我们进入了数据的批量化处理时代。。
(好了其实楔子就是用来水的)

一.数组:由 一定数量的 同类型元素 顺序排列 而成的 结构类型数据

  • 一定数量:数组处理一定数量的数据。
  • 同类型元素:要么整,要么浮点,etc。。同类型
  • 顺序排列:这个跟数列有相似处,每个数据的位置是唯一确定的。
  • 结构类型数据:还是数据。

一维数组说明格式:

类型   标识符[   ] ;            int a[10];
  • 类型:此数组所用的数据类型
  • 标识符:数组名
  • [ ]:在定义时是数组类型符,用以说明标识符是数组,其中的数字代表该数组的元素个数。必须是数字或者已定义的只读常量,因为编译器要确定数组的长度
    当我们说明数组时,可以得到一块连续存储空间,每个元素按顺序排列。
    可以在说明数组的同时给数组赋值。
int a[10]={1,2,3}

该数组有10个元素,但赋值只给出3个,则前三个元素按顺序得到赋值,剩下没给出值的元素以0为初始值。

这里写图片描述

在访问数组时:
1.下标访问:

  • 与函数相似,数组名a即数组的地址(指针),且,由于数组包含多个元素,必然占用多个原本单一元素占用的空间,所以,数组名a即是数组的首地址。
  • 在访问时,[]表示下标运算符,a[9],表示数组a中的第十个元素,它的访问按如下方式实现:
    a为数组的首地址,也是数组的第一个元素的地址,“9”表示第十个元素,称为偏移值(a[0]是第一个)调用时即:用首地址加上偏移值(a+9*sizeof(int))得到第十个元素的地址,以此实现访问。
    并且,这个时候[ ]中可以使用变量了。

    2.指针访问:

int a[10];
int *p;
p=a;
cout<<p[2];
cout<<a[2];

a即地址,将a的值赋给p,p即指针即地址即a,两次cout等价。
并且有:*(a+1)==a[1]; 直接对一个地址加上1就得到了它后边那个地址里的元素。。真酷。

二.指针数组:
当数组元素的类型是指针类型时,称其为指针数组
书上介绍了两类,分别是指向基本数据类型、指向数组、指向函数的指针数组。

为啥要有这些东西?
1.指向基本数据类型的指针数组。

一些互不相干的变量,在定义的时候它们不会被放在相邻的空间中。(像数组那样)。所以如果我们想要把它们划拉到一个集合里。可通过指针数组实现,本身跑不了,把你们的地址找个集合放起来吧。。。指针的数组就好像你们自己的数组一样。这样就可以对这些变量做一些在数组中很方便的事(批量处理)。

2.指向数组的指针数组
那么,不同的数组(类型相同)可以划拉到一起不?(集合的元素是集合)。可以。这就有了指向数组的指针数组

int a[2]={1,2},
    b[2]={3,4};//定义两个同类型元素的数组。

int *p[2];//定义一个指针数组。
 p[0]=a;//给指针数组中的指针赋值:数组名即其首地址,即其首项地址。
 p[2]=b;

3.指向函数的指针数组。

同数组,同类型的函数们可以用指针数组管理。

  1. 我们之前在函数一节已经知道可以通过定义一个函数类型而很方便地用函数类型名定义相同类型的函数。
typedef int func'name(参数表)
  1. 并在此基础上可通过函数类型名定义指向同类型函数的指针。
func'name*p
  1. 进而又有可以跳过函数类型定义而直接定义指向某类函数的指针的指针类型.
typedef int *p'sname(参数表)

上述解决了批量定义的问题,先描述类型,在建立子对象。

今天我们解决了批量管理的问题。

如果我们有一堆同类型的函数。我们就可以定义一个指针数组来管理。
同样有两种方式:

  • 先定义函数类型再定义相应的指针,哦不,,,指针数组(数目膨胀)
funcname *p [几个函数?]

或者直接跳过函数类型定义直接定义指向某一函数类型的指针数组。

int*pname[函数个数,即数组元素数])(形参表)。

以此实现批量管理函数的效果。

P.S. 数组的首项是a[0]!!!!!!!!千万注意个数!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值