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