
欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(更新ing)

👉🏻一维数组的创建和初始化
数组是什么呢?笼统来讲,就是一组相同类型的元素的集合,所以,在数组当中,你存放的元素要么全是整型要么就全是字符串类型,总而言之,它们的类型必须相同。
而数组的创建是怎么创建的呢?数组的创建又有哪些形式呢?这里我先给出几种常见的类型:
- int arr[4]={1,2,3,4}
- int arr[4]={1,2}
- int arr[4]={0}
- int arr[]={1,2,3,4}
- int arr[]={0}
对于第一种应该不难理解,arr[4]即我们创建了一个大小为存放4个元素的数组,然后我们正常在这个数组里面存放我们的元素就行了,如我们存放{1,2,3,4}进去,数组中的元素就有1 2 3 4
那么第二种也是一个大小为存放4个元素的数组,但这里与第一种不同的是,在存入的元素中只有两个,但总容量一共有四个,这时我们就以为数组中就只存放了1和2两个元素,但实际上却是1,2,0,0四个元素这是因为数组会将那些未被你初始化的元素默认为0,也就是说我只初始化了前两个元素为1,2,而第三和第四个元素则默认为0。
那么这么一讲,第三个你应该也能知道了,如果我们不想对数组的元素进行初始化,就想它是默认为0,那么我们就可以直接填写一个0就可以了(可千万不要空着什么都不写)
前面三种我们对于数组都是给定了限定存放数量的,而第四种,却并没有给出限定数量,但此时,第四种的写法仍然可以存储四个元素,数组若没有给定限定数量条件的化,那么它的大小取决于我们初始化元素的数量,arr={1,2,3,4}我们初始化了4个元素,此时数组的元素数量就是四个,arr[]={0},我们只初始化了一个,那么此时元素数量就只有一个,也就是0.
所以我们这里进行了总结:👇🏻
- 数组中的元素类型必须相同
- 数组在[]若为空,数量由我们初始化元素个数决定
- 若要限定数组元素数量,则在[]中给定限定数目
- 数组在给定限定数量条件时,若初始化元素个数未满,即不完全初始化,剩下未初始化的元素默为0
👉🏻一维数组的引用
我们一般是通过数组的下标去引用数组的某个元素。而数组的首个元素的下标是从0开始的

就比如我们想引用数组的第一个首元素,就是arr[0]。
👉🏻二维数组
二维数组的创建形式一般是这样,arr[i][j],i代表是行,j代表是列
二维数组与一维数组不同的是,在初始化的时候,行可以省略,但列不能省略
二维数组的引用也和一维数组一样,若我们要引用3行4列的元素,则arr[3][4]即可。
如果把二维数组的每一行看作一维数组,那么arr[0]为第一行的数组名,arr[1]为第二行的数组名,以此类推
👉🏻数组作为函数参数
数组名是数组首元素的地址

就比如这里我们取了arr的地址和arr[0]的地址,可以发现它们的地址是一样的,所以这句话是没有错的。
但是,我们要注意这里还存在两种特殊情况
还是以上面的例图来讲
1.sizeof(arr)的输出结果是多少,如果我们根据数组名是数组首元素的地址这句话去判断的话,那么很多人就会认为是4字节,但真正结果确是16字节
所以说,在sizeof(数组名)的情况下,数组名是数组首元素的地址这种情况就不适用了,因为这时候sizeof求的是整个数组的所占空间大小,如果想要求出首个元素所占空间大小,那么只能通用数组引用sizeof(arr[0])才能具体求出
2.&数组名:取的是整个数组的地址
如图种有三组案例,我们在上面就说到,数组名是数组首元素的地址
所以在第一组当中,arr取了首元素的地址,arr+1则是取了第二位元素的地址,这个是符合数组名是数组首元素的地址。
在第三组案例种,&arr我们说这是个特例,它取的是整个数组的地址,但是在输出出来的时候,却是首位元素的地址,那么为什么说它取的是整个数组的地址呢?这从&arr+1的输出就可以看出来,001FFA4C将4C转换为10进制就是52,52-24==28,28是16进制,若转换为10进制就是40,也就是说,&arr和&arr+1中间的地址差了40个字节大小,而这就是因为这里数组中有是个元素,整个数组所占空间大小就是40个字节,然后&arr取了所有元素的地址,所以&arr+1也就意味着给所有元素地址加了1,所以才差了40个字节。
总而言之:
除了上方两个例子,其它遇见的数组名都是首元素的地址





449

被折叠的 条评论
为什么被折叠?



