gpt4 book ai didi

c - 数组如何在结构中工作?

转载 作者:行者123 更新时间:2023-12-04 12:11:34 24 4
gpt4 key购买 nike

如果我有例如

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

每当我创建这样一个结构的实例时,就会在堆栈中为数组本身分配内存(在我们的例子中,20 个字节用于 5 个整数(将整数视为 32 位)),数字将是一个指向该缓冲区的第一个字节的指针。所以,我认为由于在节点实例内部,会有一个 20 字节的缓冲区(用于 5 个 int)和一个 4 字节的指针(numbers),sizeof(node) 应该是 24 个字节。但是当我实际打印出来时却说是 20 个字节。
为什么会这样?为什么不考虑指向数组的指针?
如有任何回复,我将不胜感激。

最佳答案

数组不是指针:


  • int arr[10]:

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

    • arr&arr的值必须相同

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


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

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

    • ptr&ptr 的值不一定相同(事实上,它们大部分不同)

    • ptr 可以设置为同时指向有效和无效的内存地址,次数不限

关于c - 数组如何在结构中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616919/

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