在确定数组的元素号时出现混淆
confusion determining element number of an array
我听我的讲师说过,机器的sizeof(某个指针)总是相等的。例如,如果它是64位,所有指针都是8字节,在32位4字节。因此,当我想指定数组的大小时,比如
,我喜欢使用sizeof
int arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(int)
我假设上面的代码中int
取4
,那么20/4
给出arr
的元素数。
int arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(int*)
我还假设sizeof(some pointer)
采用4
,因此20/4
再次给出arr
的元素数。
当我将其应用于double
数组时,我感到困惑。我认为这行不通。但是,它可以工作。
double arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(double*);
如果机器中每个指针的大小都相同,结果怎么可能是正确的?这个问题能解释清楚吗?编辑
我把*arr除法和双指针
搞混了
指针的大小不是double
数组中元素类型的大小,因为double
数组中的元素不是指针。
当你对数组应用sizeof
时,它会以字节为单位给出数组的大小,在
double arr[] = {2, 5, -1, 10, 9};
5 * sizeof(double)
和sizeof(double) != sizeof(double *)
。要获取数组中的元素个数你需要
sizeof(arr) / sizeof(double);
但是为了使它更易于维护,你可以只要求元素类型的大小,像这样
sizeof(arr) / sizeof(*arr);
或
sizeof(arr) / sizeof(arr[0]);
同样,不要依赖此方法来确定数组中元素的数量。请注意,在运行时,没有办法从c中的数组本身知道,因为它没有存储在数组中。如果要跟踪元素的数量,则需要存储该值。
当你第一次想到它时,这可能看起来很烦人,但随着你的经验,你应该学会,这样做更好。因为它可以让您完全控制程序必须处理的数据,一旦您习惯了它,就很难信任只给您数组长度的语言,例如python的len
运算符。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀