假设下面的语句:
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()
的值将与分配给 inverse
或 numbers
的原始值相同。
你还问:
If I do something like
inverse[i] = 5
will that mean thatnumbers[i] == 5
?
如果您没有更改存储在 inverse
或 numbers
中的值,并且如果 i
在 0 范围内
.. (n-1)
,则赋值后,等式成立。指针是相同的(相同类型,相同值),因此对它们进行索引会产生相同的结果。当然,它也意味着 inverse[i] == numbers[i]
。
关于c - c中malloc的多个单行赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353667/