我有以下代码:
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
实际上应该指向之前x[0]
上的值。我的问题是,a
如果该内存位置现在已被x[1]
中的内容替换,那么如何包含该前一个值?
答案 0 :(得分:2)
a
是堆栈中的变量,在您更改(通过memmove)x[0]
的值之前,您为其指定了值x[0]
。因此,a将保留x [0]的值,并且数组x将原始x[1],x[2],x[3]
存储在x[0],x[1],x[2]
所以基本上充当局部变量,它是x [0]处数据的副本。所述数据是一个整数指针,但可能是其他任何东西。