【问题标题】:Understanding array size in C [duplicate]了解 C 中的数组大小 [重复]
【发布时间】:2019-08-22 22:57:25
【问题描述】:

我知道这是 C 语言中一个非常基本的问题,所以如果这太天真了,我提前道歉:我只是在几天内学习基础知识。

int main() {

    // initialize the variables
    int num_whitespaces, num_other;
    int num_digits[10];
    printf("%lu", sizeof(num_digits));

}

这打印出40,我觉得这很奇怪。为什么不打印10,这将是javascript中数组的长度左右。

【问题讨论】:

  • 我不知道C,但我知道int 的大小是32 位(4 字节)。
  • 您是否已经尝试搜索过类似的问题?可能是因为它返回数组的大小(所有元素),而不仅仅是长度 - 元素的数量。所以在这种情况下,int 似乎是 4 个字节
  • 欢迎来到 SO!请在发布前搜索现有问题。您不太可能遇到任何人还没有多次解决的问题。见How to Ask
  • @VladimirSerykh 这是完全错误的。 C 中的int 必须至少为 16 位,否则标准不要求固定大小,因为 C 应该是可移植的。因此,例如 int 在 18 位架构上将是 18 位
  • @Shared 您还调用了未定义的行为,因为您使用了错误的格式说明符。 To print a size_t (which is the result of sizeof) use %zu

标签: c


【解决方案1】:

sizeof 返回内存中的大小。不是东西的长度。

C++ 也一样,这个链接也有同样的例子 :) https://en.cppreference.com/w/cpp/language/sizeof

size of empty class:              1
size of pointer:                  8
size of array of 10 int:         40
size of array of 10 int (2):     40
length of array of 10 int:       10
length of array of 10 int (2):   10
size of the Derived:              8
size of the Derived through Base: 4

在 C:array_length in C 中获取长度是相当困难的

【讨论】:

    【解决方案2】:

    sizeof returns the size of an object in bytes

    int 是 4 个字节。 sizeof(int[10]) 是 40。

    【讨论】:

    • 那么获取数组(任何类型)的长度而不是其大小的最佳方法是什么?
    • 规范方式:sizeof(array)/sizeof(array[0])
    猜你喜欢
    • 2020-09-10
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2021-08-05
    相关资源
    最近更新 更多