3

我在访问传递给函数的数组元素时遇到了一些问题。

#define N (128)
#define ELEMENTS(10)
typedef int (*arrayOfNPointers)[N];

N因此,如果这是正确的,那么它是一种描述指向 的指针数组的数据类型int

后来我单独初始化我的数组,如下所示:

arrayOfNPointers myPtrs = { 0 };
int i;
for (i=0; i<N; i++) {
  myPtrs[i] = (int*)malloc(ELEMENTS);
}

但是,这会失败并出现以下错误:

error: incompatible types when assigning to type 'int[128]' from type 'int *'

所以,我的语法似乎有一些非常错误的地方。但是在另一段代码中,我正在修改一些此类结构的内容,我没有问题。

void doWork(void* input, void* output) {
   int i,m,n;
   arrayOfNPointers* inputData = (arrayOfNPointers*)input;
   int* outputData = (int*)output;

   for (m=0, n=0; n<nSamples; n++) {
      for (i=0; i<nGroups; i++) {
         outputData[m++] = (*inputData)[i][n];
      }
   }
}

这个数组逻辑是不是被严重破坏了?

4

3 回答 3

5
typedef int (*arrayOfNPointers)[N];

因此,如果这是正确的,它是一种描述 N 个指向 int 的指针数组的数据类型。

我认为这是一个指向 N 个整数数组的指针,而不是一个指向整数的 N 个指针数组......

这意味着以下行的行为不符合您的预期... myPtrs[i] = (int*)malloc(ELEMENTS); 因为 myPtrs 是指向 N 维数组(在本例中为 128 个整数的数组)的指针,所以 myPtrs[i] 是第 i 个 n 维数组。所以你试图分配一个指向数组的指针,这就是你得到消息的原因......

错误:从类型“int *”分配给类型“int [128]”时类型不兼容

于 2013-04-23T21:03:59.223 回答
4

我相信您正在寻找的是以下内容...

#define N 128
#define ELEMENTS 10
typedef int* arrayOfNPointers[N];

arrayOfNPointers myPtrs = { 0 };
int i;
for (i=0; i<N; i++) {
  myPtrs[i] = malloc(sizeof( int ) * ELEMENTS);
}

您希望 arrayOfPointer 是一个包含 N 个指向 ELEMENTS 整数的指针的数组。此外,当您 malloc() 整数的空间时,您需要将 ELEMENTS 的数量乘以整数的大小。实际上,您分配的空间太小,无法容纳您尝试存储的数据。

您的 typedef 将 arrayOfPointer 声明为指向 N 个整数数组的指针。请记住使用左右阅读规则来理解您要声明的变量/类型是什么。因为你(*arrayOfPointer)在括号中没有任何东西在右边和一个指向左边的指针,所以 arrayOfPointer 是一个指向[N](right) int (left) 的指针。不是你想要的。

另外...不要在 C 中强制转换 malloc()

于 2013-04-23T21:13:03.833 回答
3

基于它的使用,malloc()它似乎是一个数组int*

int* myPtrs[N];   /* Array of 'int*'. */

而不是指向int[128]数组的指针:

int (*myPtrs)[N]; /* Pointer to array of int[N]. */

是必须的。使用malloc()不正确,因为它为 10 个字节而不是10int秒分配内存。改成:

/* Casting result of malloc() is not required. */
myPtrs[i] = malloc(sizeof(int) * ELEMENTS);
于 2013-04-23T21:04:47.513 回答