定义二维数组的陷阱

如果 make-vector 第二个参数是 object 的话,就是指针赋值了:

DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
       doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
See also the function `vector'.  */)
  (Lisp_Object length, Lisp_Object init)
{
  CHECK_NATNUM (length);
  struct Lisp_Vector *p = allocate_vector (XFASTINT (length));
  for (ptrdiff_t i = 0; i < XFASTINT (length); i++)
  p->contents[i] = init;
  return make_lisp_ptr (p, Lisp_Vectorlike);
 }

所以不管几维,修改的都是同一个 object。

1 个赞