所以我开始玩 C 并且到目前为止玩得很开心。
然而,有几件事我无法理解。
我知道这最终会在堆栈上
int i = 0;
我知道这将为堆上的整数保留空间并返回地址
int *i = malloc(sizeof(int));
然而。如果我这样做
int i_one = 1, i_two = 2;
int *arr = calloc(2, sizeof(int));
arr[0] = i_one;
arr[1] = i_two;
i_one 和两个是堆栈分配的,而 arr 在堆上。这是否意味着 arr 会将 i_one 和 2 的值复制到堆上,或者它会简单地保存对堆栈上变量的 2 个引用。我假设它是 alt one 的变体,考虑到(如果我没记错的话)我的堆栈分配的整数将在我退出此函数后立即被释放。
总而言之,当使用 calloc 创建动态分配的数组时。数组中的条目是否也需要分配指针/堆?在我看来这没有意义,因为那样我不会创建一个 int 指针数组吗?是的,我知道指针的大小与 int 相同,所以这个例子有点愚蠢,但你明白了。
谢谢