声明数组的时候不能指定长度吗

互联网 不建议 2023-08-21 20:28:20 -
JavaSE 数组

大家好,今天来为大家分享声明数组的时候不能指定长度吗的一些知识点,和c语言为什么不建议数组长度的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

本文目录

  1. 声明数组的时候不能指定长度吗
  2. c语言数组一定要申请空间吗
  3. C语言中的sizeof关键字能够计算数组长度吗老师说有陷阱是什么意思
  4. C语言数组长度大于元素个数

声明数组的时候不能指定长度吗

这种情况下是可以指定长度的。

C语言规定在声明数组时必须指定长度。

如inta[20];,只写inta[];是不允许的。

其它语言规定大多如此。

c语言数组一定要申请空间吗

是的。

定义数组需要指定大小以便分配空间;不指定空间需要在定义时初始化,就是intn[]={,,,},实际上是隐性分配空间。

因为编译器要为数组分配存储空间,所以一定要标明数组大小。在程序内不能实现容量可变。

所以,c语言数组一定要申请空间。

C语言中数组的申请方式有两种:静态申请固定大小的空间、动态申请内存空间。

C语言中的sizeof关键字能够计算数组长度吗老师说有陷阱是什么意思

谢邀。

在C语言程序开发中,sizeof()是一个常用,也是一个非常有用的关键字,程序员常常使用它来获取变量占用内存的字节数。

称sizeof()为“关键字”,是因为虽然sizeof()使用起来很像一个函数,但是它与函数还是有很大区别的,这一点我之前的文章讨论过。

小技巧:避免“硬解码”造成的代码维护困难

例如下面这样的例子,请看相关C语言代码如下:

size就等于x在内存中占用的字节数。在固定的机器平台,变量x是float类型,占用的内存字节数是固定的,例如float类型在pc上常占用4字节内存空间。

之所以不直接使用4,而是使用sizeof(x)是为了方便以后的维护。可以想象,若以后发现x需要使用更长的数据类型double才能满足需求,只需将floatx;修改为doublex;就可以了,size会自己适应修改。

其实不仅C语言,在其他语言的程序开发中,都有这样一个原则:尽可能的避免硬解码出现,尽可能的避免重复功能出现,这样才有利于后期的维护——万一需要修改代码,只需要修改一处。

sizeof()获取数组长度的“陷阱”

很多时候,利用sizeof()还可以获取数组的长度,例如下面这两行C语言代码:

len此时等于128,也即数组str的长度。但是如果数组不是char型的,而是其他类型的,len还等于数组长度吗?编写如下C语言程序:

编译并执行这段C语言代码,得到如下结果:

显然,len并不等于arr的长度10,而是等于40。很多C语言初学者看到这里会感到迷惑,怎么回事?sizeof(数组名)不是等于数组长度的吗?

sizeof()关键字从来就不是计算长度的关键字,而是获取变量占内存空间字节数的关键字,这一点要谨记。str是一个长度为128的char型数组,它占用内存字节数恰好等于128,是因为str的每一个元素都是char型的,而char型占用一个字节的内存空间,因此此时str占用内存字节数和它的长度恰好是相等的。

再来看数组arr,它的长度等于10,但是它的每个元素都是int型的,而在我的机器上int型变量占用4字节内存空间,所以arr一共占用40字节内存空间,因此sizeof(arr)等于40,而不是10。

获取数组长度的小技巧

现在知道sizeof()有时无法直接获取数组长度的原因了,我们完全可以如下定义一个方法,用于计算数组长度,相关C语言代码如下,请看:

sizeof(数组名)计算的是整个数组占用的内存字节数,而sizeof(*x)等价于sizeof(x[0]),也即数组第一个元素占用的内存字节数。因为数组中各个元素的类型是相同的,所以sizeof(*x)也可以认为是每一个数组元素占用的内存字节数。上述宏定义就相当于:

数组长度=数组所有元素占用内存字节数/每个元素占用内存字节数

这么看来,arr_len就不难理解了。编写如下C语言程序测试一下arr_len:

编译并执行上面这段C语言程序,得到如下输出:

显然,arr_len计算其他类型数组的长度也不在话下。

C语言数组长度大于元素个数

c语言数组长度不一定大于元素个数,比如char的数组,就等于元素个数。其长度等于元素个数*sizeof(元素)。

关于声明数组的时候不能指定长度吗的内容到此结束,希望对大家有所帮助。

Github标星35K 超火的阿里p7大佬整理的Java核心知识总结,附超全教程文档