C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 访问typedef’ed指针数组的元素大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在访问传递给函数的数组元素时遇到了一些问题.

#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

大佬总结

以上是大佬教程为你收集整理的c – 访问typedef’ed指针数组的元素全部内容,希望文章能够帮你解决c – 访问typedef’ed指针数组的元素所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: