在c中使用malloc进行多个一行分配

Adj*_*jit 1 c memory variable-assignment assignment-operator

假设以下声明:

int *numbers, *inverse;
numbers = inverse = (int *)malloc(n * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

我很想知道这里发生了什么 - 我知道它是正确的,所以首先inverse要分配内存.然后我设置numbers等于inverse,这是否意味着内存位置numbers将是相同的inverse?或者它的位置分配相同的内存量&numbers&inverse

例如,如果我做的inverse[i] = 5意思是numbers[i] == 5什么意思?

Jon*_*ler 8

你有:

int *numbers, *inverse;
numbers = inverse = (int *)malloc(n * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

这和写作一样:

int *inverse = (int *)malloc(n * sizeof(int));
int *numbers = inverse;
Run Code Online (Sandbox Code Playgroud)

变量numbers只有一个指针的副本inverse- 它指向同一个地方.但是,您可能会使用一个指针迭代数组,同时从函数返回另一个指针,这可能是拥有两个副本的一个很好的理由.

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

你也问:

如果我这样做inverse[i] = 5意味着numbers[i] == 5什么?

如果你不改变存储的值或者是inversenumbers,如果i是在范围0... (n-1),然后在转让之后,平等将举行.指针是相同的(相同类型,相同的值),因此索引它们会产生相同的结果.这inverse[i] == numbers[i]当然也意味着.