首页 > 其他分享 >8.2.1 数组运算

8.2.1 数组运算

时间:2024-09-30 14:18:26浏览次数:3  
标签:初始化 遍历 运算 8.2 数组 sizeof 我们 单元

1.数组的集成初始化

搜索是现代计算机或者说互联网上频繁在发生的事情.现在我们来看一个最最最基本最简单的搜索要怎么去做.在给定的一组数据中,如何找出某个数据是否存在?我们来看一段现成的代码:

我们在开头定义了一个数组,像这样定义一个数组我们把它叫做集成初始化.我们定义数组的时候有两种方案,一种是定义的时候我不去初始化它,等后面在循环遍历数组依次给每个数组单元赋值,第二种就是我们给数组一组数字,我们用这一组数字去初始化数组a[],而且我们也可以在把方括号留空,不给出数组具体的大小,让编译器替我们数.

我们也可以这样定义数组:int a[13]={2};这样做编译器会把2赋给数组的第一个单元,然后后面的单元全部赋给0.你还记不记得,我们前面用了一个循环遍历数组的手段来把数组所有单元的值都初始化为0,其实我们有个更调皮的手段.我们可以这样:int a[13]={0},它会把数组内所有单元都初始化为0(其实我试了一下,发现就算大括号是空的结果也一样)

2.集成初始化的定位

另外我们在c99里,还可以做这样一件有趣的事情.它可以用这样的方式去给指定的位置赋值:

我们用[n]在初始数据化中给出定位,没有定位的数据在前面的位置后面.其他的位置补0.这样子赋值的意思是,a[0]=2,a[1]=0,a[2]=3,a[3]=6,剩下后面所有单元都被赋0,这种写法比较适合初始化数据特别稀疏,有很多个0,但是其中又有一部分不是0.还有,如果我们没给出a的大小,c99也是支持的.它会帮我们数,如上面如果不给出方括号里面的10,他就会帮我们把数组的大小定义为4.

3.数组的大小

我们通过集成初识化可以让编译器替我们数出来这个数组有多大,可是后面循环遍历的时候我们还得自己一个个数到底有多少个数组单元.其实我们可以通过另外一种方式:sizeof(a)/sizeof(a[0]);第一个sizeof给出整个数字占据的内容的字节大小,第二个sizeof给出每个单元占的字节大小.我们上面这个程序给出的length就是这么来的.这种方式得出来的数组单元的个数永远是正确的.这样的代码最大的好处是,一旦数组中初识的数据,不需要修改遍历的代码.比如我们在a[]里又加上两个变量或者删去三个变量,仍然不会影响后面的遍历.

另外,根据一些古老的教科书,我们有一个口耳相传的传统,当我们要去集成初始化一个数组的时候,我们可以在最后一个数字后面加上一个逗号,这个逗号不会影响编译的任何结果.但是它的好处是,如果你想要加一个新数字,就不用再敲这个逗号了,当然,为了后来人更方便,你再敲上一个逗号吧.虽然确实显得很没有意义,但是这可以显示你有没有读过七八十年代的计算机的书,你可以用它来装一装的.

4.数组的赋值

像这样

是不允许的.不能直接这样把数组变量赋给另一个数组变量,实际上数组变量是一种const的东西,我们到后面讲到指针再深入探讨.所以你要把一个数组的元素交给另外一个数组,只能采用遍历的方式.

5.遍历数组

我们之前已经有过很多遍历数组的例子:

我们通常都是使用for循环,让i从0走到<数组的长度,这样循环体内最大的i刚好是数组最大的有效下标.常见错误是:循环条件为<=数组长度或;离开循环后,继续用i来做数组元素的下标.这样我们的i在离开循环的时候刚好是数组的长度,正好就是那个数组无效的下标.

6.其他

这是上面程序的大概思路.

还有一点是,当我们用数组作为函数参数时,往往必须再用另一个参数来传入数组的大小.为什么呢?因为数组在作为函数的参数时:

  • 不能在[]给出数组的大小.(给了也没有任何意义)
  • 不能再利用sizeof计算出数组的长度.(指针的知识)

标签:初始化,遍历,运算,8.2,数组,sizeof,我们,单元
From: https://blog.csdn.net/qq_73908174/article/details/142654773

相关文章

  • Js运算符(操作符)
    算数运算符a=1+1//2a=10-5//5a=10/5//2a=10/0//js中除以0不会报错,结果是Infinitya=2*2//4a=2**2//a=10%4//取余,2js中算数运算,除了字符串的加法,会自动将非数值转换为int进行计算,不像其他语言会报错a=10+true//11a=10......
  • 8.1.2. 数组的使用
    1.定义数组<类型>变量名称[元素数量];如intgrade[10];确切的说,这个类型不是数组的类型,而是数组中每一个单元的类型.每一个数组都是一个包含多个值的变量,所以我们需要给它一个名字.而后面的数字则是这个数组包含的单元的数量.元素数量必须是整数.如果带着小数点是没有意义......
  • [leetcode]53_最大子数组(序列)和
    给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入:[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6。示例2:输入:nums=[1]输出:1示例3:输入:nums=[5,4,-1,7,8]输出:23提示:1<=......
  • CentOS 7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2
    CentOS7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2 1.安装文件1.elasticsearch-7.14.0-linux-x8664.tar.gz2.elasticsearch-head-master.zip3.jdk-11linux-x64bin.tar.gz4.kibana-7.14.0-linux-x8664.tar.gz5.node-v14.18.2-linux-......
  • [USACO03Open] Lost Cows(二分加树状数组)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • P3368 【模板】树状数组 2
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • 杂:某两道依赖数组长度为 2^{k} 的杂题
    问题1:给定序列\(a_0,a_1,a_2,\cdots,a_n\)满足\(n-1=2^{k}(k\geq0)\)。定义\(R_{i}\)为\(i\)的\(k\)位的无符号二进制反转。输出\(a_{R_{0}},a_{R_{1}},a_{R_{2}},\cdots,a_{R_{n-1}}\)。题解:首先考虑如何得到\(R_{i}\)。对二进制下标使用微......
  • P10589 楼兰图腾(树状数组)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • PTA 实验三 零基础JAVA语言学习 7-1 复数类的定义 要想编写一个复数类,可以进行复数加
      要想编写一个复数类,可以进行复数加法和减法运算。编写一个包含main方法的类测试该复数类。要求该复数类至少包含一个无参的构造方法和一个带参的构造方法;数据成员包括复数的实部和虚部,为double类型;包括两个方法,分别实现复数的加法和减法运算。测试代码如下:publicsta......
  • JS数组指针prev、current、next的实现方式,涉及是否删除当前元素的情况分析
    背景由于业务,需要做一个循环切换的轮播图效果,循环展示列表中的每个item,但是由于切换(从左往右移动,遇到末尾则跳到开头)的过程中可能会删掉当前元素,所以需要更新下标后再切换。由于涉及到几个临界条件,这里列出来处理方式,以便后续参考。代码这里给出的简化过后的代码:<template>......