数组如何在结构体中工作?

2024-04-29

如果我有例如

typedef struct node
{
    int numbers[5];
} node;

每当我创建这样一个结构的实例时,都会在堆栈中为数组本身分配内存(在我们的例子中,20 个字节分配 5 个整数(将整数视为 32 位)),并且数字将是指向该缓冲区的第一个字节。所以,我认为由于在节点实例内部,将会有一个 20 字节的缓冲区(对于 5ints) 和一个 4 字节指针(numbers), sizeof(node)应该是24字节。但当我实际打印出来时,却显示 20 个字节。
为什么会发生这种情况?为什么不考虑指向数组的指针?
我将非常感谢任何回应。


数组不是指针:


  • int arr[10]:

    • 使用的内存量是sizeof(int)*10 bytes

    • 的价值观arr and &arr必然相同

    • arr指向一个有效的内存地址,但不能设置为指向另一个内存地址


  • int* ptr = malloc(sizeof(int)*10):

    • 使用的内存量是sizeof(int*) + sizeof(int)*10 bytes

    • 的价值观ptr and &ptr不一定相同(事实上,它们大多是不同的)

    • ptr可以设置为指向有效和无效的内存地址,任意多次

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组如何在结构体中工作? 的相关文章

随机推荐

  • 检测何时从控制台调用函数的最佳方法

    我想知道检测何时通过控制台直接调用方法或函数的最佳方法 据我目前了解 不可能在相同的函数调用上直接检测到它 但使用 call and apply 函数的方法我可以通过传递附加数据this object 给出以下代码结构 function v
  • 从 Slack 机器人访问 Slack 文件

    我需要一个能够接收和保存从 Slack 聊天室发送的文件的 Slack 机器人 问题是 slack 不发送文件内容 而是发送指向该文件的链接数组 其中大多数 包括下载链接 都是私有的 无法通过机器人访问 它确实发送了一个公共链接 但该链接指
  • 在后台线程加载广告 (adMob)

    我想在后台线程上加载我的添加 因为它使得SlidingMenu打开和关闭时滞后 我应该使用Thread Handler Or AsyncTask String MY AD UNIT ID AdView adView new AdView g
  • 如何取消等待中的任务?

    我正在处理这些 Windows 8 WinRT 任务 并且尝试使用下面的方法取消任务 并且它在某种程度上有效 CancelNotification 方法确实被调用 这使您认为任务已被取消 但在后台任务仍在运行 然后在完成后 任务的状态始终为
  • 列出 AppDomain 中存储的所有自定义数据

    为了存储发生错误时的进程状态 我想列出存储在 AppDomain 中的所有 自定义 数据 通过 SetData LocalStore 属性是私有的 AppDomain 类不可继承 有什么方法可以枚举这些数据吗 AppDomain domai
  • 为什么 Convert.ToDecimal(Double) 舍入为 15 位有效数字?

    我有一个double小数点后17位 即 double myDouble 0 12345678901234567 如果我将其转换为decimal像这样 decimal myDecimal Convert ToDecimal myDouble
  • 如何在codeigniter中从数据库返回最后一条记录?

    我正在尝试获取我拥有数据的最后日期 所以我想打印 date data 列中的最后一个日期 在模型中 public function last record query this gt db gt select LAST date data
  • 无法让 log4net 与 .net windows 服务一起使用

    我有一个 Windows 服务app config and a log4net config app config
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • 使用 git 客户端和 SVN 存储库的最佳工具/方法

    我已经使用 SVN 大约两年了 主要是通过 TortoiseSVN 和 IntelliJ 并尝试了 git 主要是通过 TortoiseGIT 在这里检测到模式 我们公司正在使用 SVN 作为存储库 他们不会考虑很快进行切换 在本地使用 g
  • 为什么我需要调用new? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中什么时候使用 new 什么时候不使用 https stackoverflow com questions 679571 when to use new and when not to in
  • 如何查找用户所属的所有组? (LDAP)

    我正在尝试获取某个用户所属的所有组 我有以下内容结构在LDAP中 o myOrganization ou unit1 cn admin cn guess and ou users cn ann cn bob cn carla myOrgan
  • PHP - 从 HTML 中提取文本、翻译并放回

    我正在使用 API 来翻译我的博客 但它有时会弄乱我的 html 这让我需要更多的工作来修复所有问题 我现在想做的是从 html 中提取内容 翻译它并将其放回原来的位置 我首先尝试使用 preg replace 来执行此操作 其中我将用诸如
  • Django官方针对绝对初学者的教程,绝对失败!

    确实不是那种程度的失败 我刚刚完成了 djangoproject com 的 4 部分教程 我的管理应用程序运行良好 我的入口点 url polls 运行良好 但我得到了以下 http 响应 没有可用的民意调查 即使数据库只有一个注册表 使
  • 当我们在平板电脑上点击外部时如何关闭 Bootstrap 3 下拉菜单?

    我正在这样做 在桌子上效果很好 document on click function dropdown toggle removeClass open 但在 iPad 上它不起作用并且我的下拉菜单仍然打开 您应该使用touchstart a
  • 将单引号替换为双引号并排除某些元素

    我想用双引号替换字符串中的所有单引号 但出现的情况除外 例如 n t ll m 等 input the stackoverflow don t said hey what output the stackoverflow don t sai
  • 将数字字符引用符号转换为 unicode 字符串

    是否有一个标准的 最好是 Pythonic 的方法来转换 xxxx 正确的 unicode 字符串的表示法 例如 1502 1508 1490 1513 1497 应转换为 使用字符串操作可以很容易地完成它 但我想知道是否有一个标准库可以实
  • 用典型的美元金额格式表示数值

    我有一个存储美元金额的数据框 它看起来像这样 gt a cost 1 1e 05 2 2e 05 我希望它可以显示为这样 gt a cost 1 100 000 2 200 000 在 R 中如何做到这一点 DF lt data frame
  • Android:Gridview 未正确显示

    我正在尝试构建一个带有单列网格的屏幕 该网格宽 180 像素并连接到屏幕的右侧 我面临的问题是 gridview 的背景绘制了整个屏幕 而不仅仅是我在 XML 中指定的 180px 从而阻止了 LinearLayout 中指定的背景图片 使
  • 数组如何在结构体中工作?

    如果我有例如 typedef struct node int numbers 5 node 每当我创建这样一个结构的实例时 都会在堆栈中为数组本身分配内存 在我们的例子中 20 个字节分配 5 个整数 将整数视为 32 位 并且数字将是指向