我怎么知道数组中的元素数量
how can i know the number of elements in array
我运行以下代码,但它一直打印"4"
为什么它打印"4"而不是"12"? 我可以使用malloc然后使用sizeof吗?(如果可以的话,那么如何)
#include<stdio.h>
int main()
{
int arr1[3]={1,2,3};
int *arr2=arr1,i;
printf("%d",sizeof(arr2));
return 0;
}
指针
不是数组。 arr2
是指向 int
的指针。 sizeof(arr2)
将返回指针的大小。要打印数组的大小,sizeof
的操作数必须是数组类型:
printf("%u",sizeof(arr1));
我可以使用
malloc
然后sizeof
吗?
不。没有便携式方法来找出错误块的大小。 malloc
返回指向已分配内存的指针。 sizeof
该指针将返回指针本身的大小。但您应该注意,当您动态分配内存时,无需使用sizeof
。在这种情况下,您已经知道数组的大小。(如果是char
数组,请使用strlen
)。
延伸阅读:c-FAQ:为什么sizeof
不告诉我指针指向的内存块的大小?
sizeof(arr2)
将打印指针的大小,因为它是int*
.但是,如果您尝试 sizeof(arr1)
,它会打印
sizeof(element_type) * array_size
即数组的大小。请记住,它没有考虑数组中有多少元素。它只考虑数组可以存储多少个元素。
arr2
是一个指针,您正在打印sizeof(pointer)
sizeof(arr1)
会给你 sizeof 数组,可能会给你 12。(假设您的整数是 4 个字节)
它打印 4 是因为 arr2
是一个指针,在 32 位架构中指针的大小为 4 个字节。你无法知道一个动态分配的数组(用malloc分配的数组)的大小,只要有一个指向它的指针。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀