将静态本地数组转换为指针

时间:2018-03-19 10:38:17

标签: c++ pointers

我正在尝试从现有代码中删除静态局部变量。我们的想法是将静态变量移动到全局结构。在这种情况下,我在更改多维数组时遇到了麻烦。 例如:

static int arr[100];

我将替换为

int *arr = global_hndl->arr;

因此以下部分代码不必更改。 有没有办法对多维数组做同样的事情? 喜欢

static int32_t delay[6][170]

例如

int foo(int x, int y)
{
    static int arr1[10];
    static int arr2[10][20];
    /*
    do something
    */
}

typedef struct _hndl
{
    int arr1[10]
    int arr2[10][20]
}global_handle

int foo(int x, int y)
{
    int *arr1 = global_handle.arr1;
    //
    /* i am trying to change arr2 in similar fashion */
}

1 个答案:

答案 0 :(得分:0)

您可以将变量定义转换为类型定义:

// variable
int arr[100];
// type
typedef int arr_type[100];

这适用于任何对象。现在,您可以使用正确的指针类型替换它们中的任何一个:

// somewhere global
arr_type global_array;
// create local reference
arr_type& arr = global_array;

这仅适用于C ++。在C中,您必须使用指针,然后指针需要不同的访问语法。这正是将C和C ++标签放入问题的原因通常是错误的。