【问题标题】:Is there any shortcut for array size / length in C?C中的数组大小/长度有什么快捷方式吗?
【发布时间】:2010-11-29 20:45:57
【问题描述】:

有什么方法可以加快在 C 中获取数组大小的速度吗?

每次输入sizeof(array)/sizeof(int) 都会变老。是否有任何 C 库有类似 .length 的东西,或者有什么方法可以将 sizeof(array)/sizeof(int) 定义为某种较短的常量(也可以使用点表示法)?

【问题讨论】:

标签: c arrays


【解决方案1】:

您可以使用sizeof(array)/sizeof(*array) 并制作宏。

#define length(array) (sizeof(array)/sizeof(*(array)))

【讨论】:

  • @typoknig *arrayarray[0] 相同
【解决方案2】:

C 中的所有解决方案都归结为一个宏:

#define ARRAY_LENGTH(array) (sizeof((array))/sizeof((array)[0]))

【讨论】:

    【解决方案3】:

    您总是可以只编写一个宏来执行此操作。请注意,它不能作为函数工作,因为您必须将数组降级为指向其第一个元素的指针,因此它只会返回 sizeof(int *) / sizeof(int)

    #define INTSIZE(array) (sizeof(array) / (sizeof(int))
    

    或者,更一般地说...

    #define SIZE(array, type) (sizeof(array) / (sizeof(type))
    

    哇,投反对票。好的,这也可以:

    #define SIZE(array) (sizeof(array) / (sizeof((array)[0]))
    

    【讨论】:

    • 要扩展 Let_Me_Be 的评论,您可以写 sizeof arr / sizeof *arr 而不必担心类型 (尽管在宏的上下文中将其写为(sizeof (arr) / sizeof *(arr)).
    • 实际上使用单独的类型有点危险,但我已经删除了反对票,因为您编辑了答案。
    【解决方案4】:

    简短的回答是“不”;在 C 中,没有办法仅根据数组表达式获取数组中元素的数量sizeof 技巧已经达到了最好的水平,它的使用仅限于数组类型的表达式。所以以下方法不起作用:

    char *foo = malloc(1024);
    size_t count = sizeof foo; 
    

    count 接收指针类型的字节数(典型桌面架构上为 4),而不是在分配的块中。

    char arr[100];
    char *p = arr;
    size_t count = sizeof p; 
    

    同上。

    void foo(char *arr)
    {
      size_t count = sizeof arr; // same as above
      ...
    }
    
    void bar(void)
    {
      char array[100];
      foo(array);
      ... 
    }
    

    同上。

    如果您需要知道数组中有多少元素,则需要单独跟踪该信息。

    C 对数组的处理是很多 烧心的根源。

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多