C++ 查找c+中int数组的长度+;,它是如何工作的?

C++ 查找c+中int数组的长度+;,它是如何工作的?,c++,C++,有人将此代码用作查找名为a的数组长度的方法: std::cout << "Length of array = " << (sizeof(a)/sizeof(*a)) << std::endl; 我不知道*在这里做什么。我还假设它是一个分数。它在分母里做什么 sizeof(a) 是整个数组的大小 尺寸(*a) 是数组中一个元素的大小,*a是数组的第一个元素,相当于a[0] 这就是为什么需要将sizeof(a)除以sizeof(*a)来获得元素的数量 如果您有一

有人将此代码用作查找名为
a
的数组长度的方法:

std::cout << "Length of array = " << (sizeof(a)/sizeof(*a)) << std::endl;
我不知道
*
在这里做什么。我还假设它是一个分数。它在分母里做什么

sizeof(a)

是整个数组的大小

尺寸(*a)

是数组中一个元素的大小,
*a
是数组的第一个元素,相当于
a[0]

这就是为什么需要将
sizeof(a)
除以
sizeof(*a)
来获得元素的数量

如果您有一个
char
数组,因为根据定义
sizeof(char)
为1,您不需要除以元素的大小,否则需要

例如,有一个10
int
的数组,假设
sizeof(int)
是4,数组的大小是10*4=40,这不是元素的数量=>您需要除以元素的大小

int a[10];

std::cout << sizeof(a) << std::endl; // print 40 supposing sizeof(int) is 4
std::cout << sizeof(*a) << std::endl; // print 4 supposing sizeof(int) is 4
std::cout << (sizeof(a)/sizeof(*a)) << std::endl; // print 10 expected
inta[10];
标准::cout
sizeof(a)

是整个数组的大小

尺寸(*a)

是数组中一个元素的大小,
*a
是数组的第一个元素,相当于
a[0]

这就是为什么需要将
sizeof(a)
除以
sizeof(*a)
来获得元素的数量

如果您有一个
char
数组,因为根据定义
sizeof(char)
为1,您不需要除以元素的大小,否则需要

例如,有一个10
int
的数组,假设
sizeof(int)
是4,数组的大小是10*4=40,这不是元素的数量=>您需要除以元素的大小

int a[10];

std::cout << sizeof(a) << std::endl; // print 40 supposing sizeof(int) is 4
std::cout << sizeof(*a) << std::endl; // print 4 supposing sizeof(int) is 4
std::cout << (sizeof(a)/sizeof(*a)) << std::endl; // print 10 expected
inta[10];

STD::CUT

C++,int为4字节。sizeof(*a)获取数组存储的类型的字节大小。

(sizeof(a)/sizeof(*a))
所做的是将数组存储的总字节除以数组类型的字节大小,从而得到长度


例如:您有一个16字节的数组[1,2,3,4],int的大小是4字节。16字节/ 4字节=4,数组长度。

C++,int为4字节。sizeof(*a)获取数组存储的类型的字节大小。
(sizeof(a)/sizeof(*a))
所做的是将数组存储的总字节除以数组类型的字节大小,从而得到长度


例如:您有一个16字节的数组[1,2,3,4],int的大小是4字节。16字节/4字节=4,数组的长度。

*a
是数组中的第一个元素。 星号
*
用于取消对指针的引用,即我们得到存储在该地址的值

原因是
size(a)
将返回整个数组的大小(以字节为单位)。 这可能不是数组的大小,因为一个元素中通常有多个字节。
因此,我们必须除以单个元素的大小,因此
(sizeof(a)/sizeof(*a))
*a
是数组中的第一个元素。 星号
*
用于取消对指针的引用,即我们得到存储在该地址的值

原因是
size(a)
将返回整个数组的大小(以字节为单位)。 这可能不是数组的大小,因为一个元素中通常有多个字节。
因此,我们必须除以单个元素的大小,因此
(sizeof(a)/sizeof(*a))

如果您知道数据类型,那么一种方法是:

int size = sizeof(a)/sizeof(int)
*a
是对数组第一个元素的引用

sizeof(*a)
给出数组的第一个元素使用的内存量。例如,32位计算机上的标准int元素将使用4位


sizeof(a)
是整个数组的大小。

如果您知道数据类型,可以使用以下方法:

int size = sizeof(a)/sizeof(int)
*a
是对数组第一个元素的引用

sizeof(*a)
给出数组的第一个元素使用的内存量。例如,32位计算机上的标准int元素将使用4位


sizeof(a)
是整个数组的大小。

意味着
a
是数组的名称,
sizeof(a)
给出了整个数组的大小,
(*a)
只是指向数组的第一个元素的指针,即
a[0]
因此包含一个元素(所有元素的大小相等),因此,大小将除以完整数组大小/一个元素的大小,等于插槽或元素的数量。

意味着
a
是数组的名称,
sizeof(a)
给出完整数组的大小,
(*a)
只是指向数组第一个元素的指针,即
a[0]
因此保留一个元素(所有元素的大小都相同),因此大小将除以一个元素的完整数组大小/大小,等于插槽或元素的数量。

这可能会有所帮助:Turbo具有
std
?建议:切换到与C++11兼容的编译器,例如最近的(可能在Windows上)或。读一本好书,读一读。在你的问题中提供一些。使用此选项可能会有所帮助:Turbo具有
std
?建议:切换到与C++11兼容的编译器,例如最近的(可能在Windows上)或。读一本好书,读一读。在你的问题中提供一些。使用我不确定
int
总是4字节。它可能有2个字节。在某些VLIW处理器上,它可能是一个64位的字。你可以找到C++的代码实现:<代码> siZoof(char)< /C>和<代码> siZeOf(int)< /C> > 1(16位<代码> char < /C> >)<代码> int <代码>不必是4字节。唯一的要求是它必须至少为16位,并且至少与
short
一样大。是的,现在很多实现都是32位的,但不要假设它总是32位的