【问题标题】:Size of array of pointers to char指向 char 的指针数组的大小
【发布时间】:2022-01-02 18:23:21
【问题描述】:

我打印了这个全局变量的大小,输出为 20。我试图理解它不仅仅是 15,因为有 5 个元素,每个元素的大小为 3(包括每个元素末尾的 \0 )。

#include <stdio.h>

char* arrChar[5] = { "hh","jj","kk","zz","xx" };

int main()
{
printf("size = %d\n", sizeof(arrChar));
}

我不知道是否有联系,但如果我们将所有数字组合在一起,它将是 20,但我仍然不明白元素的数量 (5) 如何添加到数组中元素的大小 ( 15) 有任何意义。

【问题讨论】:

  • 提示:您的平台上五个指针的大小是多少? . 那毕竟是那个数组中的实际内容。
  • since there's 5 elements, each one is size of 3 不。你有一个指针数组。每个指针的大小为 4。
  • char arrChar[5][3] 的类型是正确的,但 char* arrChar[5] 的类型完全不同。
  • *char 的大小在 32 位机器上通常为 4 字节。所以数组的大小是 5*4 Byte = 20 Byte。

标签: arrays c pointers char


【解决方案1】:

你说得对,内存中某处占用了 15 个字节。但这些信息通常没有用。

对于 char str[] = "1";sizeof(str)sizeof(char*) 相同,它始终是指针的大小(在 32 位设置中为 4 个字节)

对于char str[] = "1234567"; sizeof(str) 仍然相同(使用strlen 作为字符串长度)

如果你有 5 个strs,那么它的大小是 4 x 5。

您可以使用sizeof(arrChar)/sizeof(*arrChar) 来获取数组中的元素总数。

【讨论】:

    【解决方案2】:

    在您的示例中,实际数据是存储在内存的某些只读部分中的字符串文字。数据不在arrChar 内分配,只是数据的地址。

    无论您将每个指针设置为指向什么,sizeof(arrChar) 将始终产生 sizeof(char*) * 5。如果指针大小为 4 字节,则 4*5=20。

    【讨论】:

      【解决方案3】:

      *char 指针每个元素占用 4 位。由于您的列表中有 5 个元素,即使是普通字符也占用 3 位,但由于您的指针占用 4 位,所以它需要 20 位,而不是 15 位。

      【讨论】:

      • A *char占用 4 或 8 个字节,但从不占用 4 位。
      猜你喜欢
      • 2018-04-05
      • 2021-01-26
      • 2016-01-27
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多