将extern数组分配给局部变量而不复制数组

时间:2018-01-03 16:24:47

标签: c arrays

我有一个extern数组,我希望能够通过使用局部变量来修改它:

标头文件

typedef char VAR[200]
extern VAR B={0}

主要文件

VAR S=B;

有没有办法在不复制数组的情况下做到这一点?

1 个答案:

答案 0 :(得分:3)

  

我希望能够通过使用局部变量

来修改它      

有没有办法在不复制数组的情况下做到这一点?

创建指向extern数组的指针。

#define VAR_N 200
typedef char VAR[VAR_N];
extern VAR B;

void foo(void) {
  VAR *p = &B;  // p is a pointer to B

  printf("%c\n", B[42]); // print original value of one element
  (*p)[42] = 'x';
  printf("%c\n", B[42]); // print changed value of one element

  // modify all elements of B
  for (size_t i=0; i<VAR_N; i++) {
    (*p)[42] = 'y';
  }
  printf("%c\n", B[42]); // print changed value of one element

  // modify all elements of B
  // Notice *p has the same size as B
  size_t n = sizeof *p / sizeof (*p)[0];
  memset(p, 'z', n);
  printf("%c\n", B[42]); // print changed value of one element
}