c - c中malloc的多个单行赋值

标签 c memory variable-assignment assignment-operator

假设下面的语句:

int *numbers, *inverse;
numbers = inverse = (int *)malloc(n * sizeof(int));

我很想知道这里发生了什么——我知道它是从右到左的,所以首先要为 inverse 分配内存。然后我设置 numbers 等于 inverse,这是否意味着 numbers 的内存位置将与 inverse 相同>?或者它是否在位置 &numbers&inverse 分配相同数量的内存?

例如,如果我执行类似 inverse[i] = 5 的操作,是否意味着 numbers[i] == 5

最佳答案

你有:

int *numbers, *inverse;
numbers = inverse = (int *)malloc(n * sizeof(int));

这和写一样:

int *inverse = (int *)malloc(n * sizeof(int));
int *numbers = inverse;

变量 numbers 只是在 inverse 中有一个指针的副本——它指向同一个地方。但是,您可能要使用一个指针遍历数组,同时从函数返回另一个指针,这可能是拥有两个副本的一个很好的理由。

只有一个内存分配;需要调用一次 free() 来释放分配的内存。传递给 free() 的值将与分配给 inversenumbers 的原始值相同。

你还问:

If I do something like inverse[i] = 5 will that mean that numbers[i] == 5?

如果您没有更改存储在 inversenumbers 中的值,并且如果 i0 范围内 .. (n-1),则赋值后,等式成立。指针是相同的(相同类型,相同值),因此对它们进行索引会产生相同的结果。当然,它也意味着 inverse[i] == numbers[i]

关于c - c中malloc的多个单行赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353667/

相关文章:

将 C 代码转换为 Delphi

c - 如何连接两个字符数组以在 C 中从 fopen 打开文件?

c - 为什么我的程序只能在调试器中运行?

ruby - 变量赋值 "x, = 1,2"在 Ruby 中如何工作?

python - 通过分配 : Python

c - 如何在库内部进行调试?

c - mac os 上的 sqlite c 库?

linux - 保存输入的命令供以后使用

r - 长向量的稀疏矩阵支持(超过 2^31 个元素)

delphi - 已发布的持久属性 - 我应该使用 FMyPercient.Assign(Value) 还是 FMyPercient := Value?