1

我有以下代码:

int** x;

// Add 4 int pointers to x - code ommitted

// Pop the first element
int* a = x[0];
memmove(&x[0], &x[1], sizeof(int*) * 3);
x = realloc(x, sizeof(int*) * 3);

// Some code that uses 'a' - ommitted

根据我的理解a,现在指向的第一个位置x指向。但是该内存位置现在实际上包含以前x[1]由于memmove.

看看这段代码是如何使用的,似乎它a实际上应该指向之前的值 on x[0]。我的问题是,a如果该内存位置现在已被替换为 in ,如何包含先前的值x[1]

4

1 回答 1

2

a是堆栈上的一个变量,您x[0]在更改(通过 memmove) 的值之前将. 的值分配给该变量x[0]。因此, a 将保留 x[0] 的值,并且数组 x 将原始x[1],x[2],x[3]存储在x[0],x[1],x[2]

所以基本上 a 充当局部变量,它是 x[0] 处数据的副本。所述数据是一个整数指针,但可以是其他任何东西。

于 2015-01-11T06:58:11.287 回答