欢迎光临散文网 会员登陆 & 注册

数组:判断是否到末尾和获取size的思考

2021-12-28 21:13 作者:云汉含星  | 我要投稿

数组:(非char,非string)判断是否到末尾:

    这两种方法一直都有被用到,直到我的遇到了一个明显能进去,但是死活进不去的循环...人都给我整傻了!

    没错,这个地方的第一项  ( 0 != '\0' ) 判定成了相等,所以没进去循环!我还特地尝试了一下。如果存在疑问,用 if 去验证这个等式。所以此办法遍历数组失效了!

    但是问题又来了,如果使用sizeof()去统计空间大小,这个就和初始化数组的时候相关了。

    不指定数组大小的时候,就会默认分配当前需要的内存大小,sizeof得出的空间大小也就是实际的大小。

    如果指定了大小,那么就会被分配指定的内存,以上面的testNum2数组举例,实际占用了6个数据,但是统计出来时40个字节,也就是10个int的大小。

    这个问题并非只有在int数组上体现。

数组:char :判断是否到末尾:

字符串转为char[]类型的时候,实际上编译器做了一个限制!举个例子:

这里给三个char数组的初始化:后两个都分配了6个字节,因为 字符串一定会存在一个'\0'作为字符串的结尾标识,所以实际大小会多一个。

    所以针对string可以放心的使用(str[i] != '\0') 作为末尾判定。但是 char[] 在数据存满的情况下,使用 '\0' 判定会越界。 

    还有一点:string使用const char[]实现的,所以  str[i] = 'x' ;  这样子的赋值语法不会生效,同时string直接转为char[] 是不可以实现的。需要自己去遍历str给char[]赋值。

    所以一个很矛盾的点在于,其他类型(非string)的数组使用 “是否等于‘\0’来判断”是不合理的。但是使用sizeof去统计字节的方式,往往不是这个数组实际存储数据的长度(很多时候我们是需要定义一个大的数组去应对一个未知的数据)

    所以对于长度不确定,并存在0的int数组,我们没有办法用sizeof或者!='\0'的方法直接获取实际有效长度。可以把非数据部分写为没有意义的一个数,以此作为判断结尾的标志。

还有一点:string类型需要使用size()方法。


数组:判断是否到末尾和获取size的思考的评论 (共 条)

分享到微博请遵守国家法律