访问typedef'ed指针数组的元素

时间:2013-04-23 20:59:12

标签: c++ c arrays pointers

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

#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];
      }
   }
}

这个阵列逻辑是否严重受损?

3 个答案:

答案 0 :(得分:5)

typedef int (*arrayOfNPointers)[N];
  

所以,如果这是正确的,它是一个描述N个指向int的数组的数据类型。

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

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

  

错误:从类型'int *'中分配类型'int [128]'时出现不兼容的类型

答案 1 :(得分: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是一个指向ELEMENTS整数的N个指针的数组。另外,当malloc()为整数空间时,需要将ELEMENTS的数量乘以整数的大小。实际上,您分配的空间太小,无法容纳您尝试存储的数据。

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

另外...... do not cast malloc() in C

答案 2 :(得分:3)

根据malloc()的使用情况,它似乎是int*

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

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

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

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

/* Casting result of malloc() is not required. */
myPtrs[i] = malloc(sizeof(int) * ELEMENTS);