加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 访问typedef’ed指针数组的元素

发布时间:2020-12-16 10:24:14 所属栏目:百科 来源:网络整理
导读:我在访问传递给函数的数组元素时遇到了一些问题. #define N (128)#define ELEMENTS(10)typedef int (*arrayOfNPointers)[N]; 所以,如果这是正确的,它是一个描述N指针数组的数据类型. 我稍后单独初始化我的数组,如下所示: arrayOfNPointers myPtrs = { 0 };i
我在访问传递给函数的数组元素时遇到了一些问题.

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

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

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

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

这个阵列逻辑是否严重破坏?

解决方法

我相信你正在寻找的是以下……

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

还…… do not cast malloc() in C!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读