从int [] []初始化的int **中读取const值

时间:2016-03-20 03:52:26

标签: c arrays pointers

我的目标是访问max_resources_per_client[1][1]

在无法修改的conf.c中,我得到了:

#define NUM_CLIENTS 5
#define NUM_RESOURCES 3
const unsigned int num_clients = NUM_CLIENTS;
const unsigned int num_resources = NUM_RESOURCES;
const unsigned int max_resources_per_client[NUM_CLIENTS][NUM_RESOURCES] = {
  {7, 5, 3},
  {3, 2, 2},
  {9, 1, 2},
  {2, 2, 2},
  {4, 3, 3},
};

在我的档案main.c中,我有:

extern const unsigned int num_clients;
extern const unsigned int num_resources;
extern const unsigned int **max_resources_per_client;

如何在不导致分段错误的情况下访问max_resources_per_client[1][1]

注意:尝试

extern const unsigned int max_resources_per_client[num_clients][num_resources];

导致错误:variably modified ‘max_resources_per_client’ at file scope

注意:尝试extern const unsigned int max_resources_per_client[NUM_CLIENTS][NUM_RESOURCES];

导致错误:NUM_RESOURCES’ undeclared here (not in a function)

2 个答案:

答案 0 :(得分:2)

参考此 - > How to declare extern 2d-array in header?

您至少需要包含二维数组的最右列大小。您可以这样声明:

Random rndm = new Random();
    for (int i = 0; i < 10000; i++)
    {
    myarray.add(i, rndm.nextInt());
    }

否则编译器将无法计算第一行之后的偏移量。

答案 1 :(得分:1)

max_resources_per_client是无符号整数的二维数组,与unsigned int **(指向unsigned int的指针)不同。 extern声明需要将max_resources_per_client声明为数组。 extern声明应该看起来像conf.c中的定义但没有初始化器:

const unsigned int max_resources_per_client[NUM_CLIENTS][NUM_RESOURCES];

您实际上并不需要NUM_CLIENTS,以便编译器知道发生了什么,所以您可以这样声明:

const unsigned int max_resources_per_client[][NUM_RESOURCES];

编译器至少需要知道第二个维度,以便它可以计算到数组中的正确偏移量。上述声明告诉它每一行&#34;行&#34;数组包含NUM_RESOURCES无符号整数,这允许它计算任何元素的偏移量。