gpt4 book ai didi

c - 获取数组的长度

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:21 25 4
gpt4 key购买 nike

我一直想知道如何获取数组元素的数量。在这个网站的某个地方,我找到了一个答案,告诉我声明以下宏:

#define NELEMS(x) (sizeof(x) / sizeof(x[0]))

它适用于定义如下的数组:

type arr[];

但不适用于以下情况:

type *arr = (type) malloc(32*sizeof(type));

在那种情况下它返回 1(它应该返回 32)。我会很感激一些提示

最佳答案

指针不保留有关它们是指向单个元素还是指向数组第一个元素的信息

所以如果你有这样的陈述

type *arr = (type) malloc(32*sizeof(type));

那么这里的arr不是数组。它是指向动态分配的内存区开始的指针。

或者即使你有以下声明

type arr[10];
type *p = arr;

然后指针再次不知道它是指向单个对象还是指向数组的第一个元素。你可以随时写例如

type obj;
p = &obj;

因此,当您处理指向数组第一个元素的指针时,您必须在某处(在其他变量中)保留引用数组的实际大小。

至于数组本身,你确实可以使用表达式

sizeof( arr ) / sizeof( *arr )

sizeof( arr ) / sizeof( arr[0] )

但是数组不是指针,尽管除了极少数异常(exception),它们经常被转换为指向其第一个元素的指针。 sizeof 运算符就是这样的一个异常(exception)。 sizeof 运算符中使用的数组不会转换为指向其第一个元素的指针。

关于c - 获取数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30412848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com