假设下面的语句:

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的原始值相同。
你也会问:
如果我做类似于inverse[i] = 5的事情,这是否意味着numbers[i] == 5
如果您没有更改存储在inversenumbers中的值,并且i0范围内(n-1),然后在赋值之后,等式将保持不变指针是相同的(相同的类型,相同的值),因此索引它们产生相同的结果。当然,这也意味着inverse[i] == numbers[i]

10-04 14:24