混淆确定数组的元素数
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*);
如果一台机器上每个指针的大小都一样,结果怎么可能是对的?问题能解释一下吗?
编辑
I mixed up division by *arr and double pointer
指针的大小不是 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
运算符。
我从我的讲师那里听说,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*);
如果一台机器上每个指针的大小都一样,结果怎么可能是对的?问题能解释一下吗? 编辑
I mixed up division by *arr and double pointer
指针的大小不是 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
运算符。